gpt4 book ai didi

用于分页 + 排序的 ServiceStack QueryBase 类,但未触发验证

转载 作者:行者123 更新时间:2023-12-04 04:17:10 25 4
gpt4 key购买 nike

我创建了一个 QueryBase 类,以便在需要时支持分页和排序。

public class QueryBase
{
public string Sort { get; set; }
public int PageNumber { get; set; }
public int PageSize { get; set; }
}

如果一个类支持这些特性,它会像这样简单地扩展它:

public class Cars: QueryBase, IReturn<CarsResponse>
{
}

public class CarsResponse : IHasResponseStatus
{
public List<Car> Cars { get; set; }
public ResponseStatus ResponseStatus { get; set; }
}

然后为了从查询字符串中填充 QueryBase,我创建了一个 RequestFilterAttribute 可以在需要时使用:

public class QueryRequestFilterAttribute : Attribute, IHasRequestFilter
{
#region IHasRequestFilter Members

public IHasRequestFilter Copy()
{
return this;
}

public int Priority
{
get { return -100; }
}

public void RequestFilter(IHttpRequest req, IHttpResponse res, object requestDto)
{
var request = requestDto as QueryBase;
if (request == null) { return; }
request.PageNumber = req.QueryString["pageNumber"].IsEmpty() ? 1 : int.Parse(req.QueryString["pageNumber"]);
request.PageSize = req.QueryString["pageSize"].IsEmpty() ? 15 : int.Parse(req.QueryString["pageSize"]);
request.Sort = req.QueryString["sort"].IsNullOrEmpty() ? "id" : req.QueryString["sort"];
}

#endregion
}

一切正常,但我现在的目标是启用验证以定义一些基本规则,如 maxpagesize 或 minpagenumber。一个非常基本的实现是:

public class QueryBaseValidator : AbstractValidator<QueryBase>
{
public QueryBaseValidator()
{
RuleFor(query => query.PageSize).LessThanOrEqualTo(100).GreaterThan(0);
}
}

以这种方式,验证器过滤器无法在其缓存中找到上面的验证器,因为它搜索 Cars 而不是 QueryBase(第 11 行 ValidationFilter.cs):

ValidatorCache.GetValidator(req, requestDto.GetType());

为了避免在每个子类中编写相同的验证逻辑,这个问题的最佳解决方案是什么?

最佳答案

我找到了一个解决方案,但我不知道它是否是最好的解决方案:为每个实现 QueryBase 的类使用一个验证器。

QueryBaseValidator修改如下:

public class QueryBaseValidator<T> : AbstractValidator<T> where T : QueryBase
{
public QueryBaseValidator()
{
RuleFor(query => query.PageSize).LessThanOrEqualTo(100).GreaterThan(0);
}
}

为子类 Cars 创建的附加验证器

public class CarsValidator : QueryBaseValidator<Cars>
{
}

通过这种方式,一切正常,我现在已经基本实现了通用分页、排序,很快就会使用 ServiceStack 进行查询。

关于用于分页 + 排序的 ServiceStack QueryBase 类,但未触发验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15604741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com