数据全局页面大小
Odata Global PageSize
有人可以解释为什么当客户端查询不包含 Count=True 时我的 EnableQueryAttribute 过滤器没有触发吗?我的整个数据集都已返回。
public class EnableQueryWithDefaultPageSizeAttribute : EnableQueryAttribute
{
const int pageSizeDefault = 100;
public override IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)
{
int pagesize = pageSizeDefault;
var result = queryOptions.ApplyTo(queryable, new ODataQuerySettings { PageSize = pagesize });
return result;
}
}
以下查询触发过滤器:
https://localhost:5001/api/teams?$count=true
此查询未触发过滤器:
https://localhost:5001/api/teams
解决它的唯一方法是现在硬编码我的控制器方法:
[EnableQuery(PageSize = 100)]
我的优点是拥有一个全局过滤器,可以为任何 Odata API 请求设置页面大小。我用谷歌搜索并阅读了 Microsoft 文档,但仍然找不到解决方案。任何帮助将不胜感激。我目前使用的是 .net core 6.0 和 AspNetCoreOdata 8.0.6。
您是否尝试过在构造函数中故意设置 属性?这还有一个额外的好处,即仍然允许您覆盖每个端点的默认页面大小。
public class EnableQueryWithDefaultPageSizeAttribute : EnableQueryAttribute
{
public EnableQueryWithDefaultPageSizeAttribute()
{
this.PageSize = 100;
}
}
我认为 .Net 5/6 中的问题是分页行为需要从 Edm 中解决,而不是从单个查询中解决,这是对 .Net FX 实现的重大更改,您可以在per-request 基础。
有人可以解释为什么当客户端查询不包含 Count=True 时我的 EnableQueryAttribute 过滤器没有触发吗?我的整个数据集都已返回。
public class EnableQueryWithDefaultPageSizeAttribute : EnableQueryAttribute
{
const int pageSizeDefault = 100;
public override IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)
{
int pagesize = pageSizeDefault;
var result = queryOptions.ApplyTo(queryable, new ODataQuerySettings { PageSize = pagesize });
return result;
}
}
以下查询触发过滤器:
https://localhost:5001/api/teams?$count=true
此查询未触发过滤器:
https://localhost:5001/api/teams
解决它的唯一方法是现在硬编码我的控制器方法:
[EnableQuery(PageSize = 100)]
我的优点是拥有一个全局过滤器,可以为任何 Odata API 请求设置页面大小。我用谷歌搜索并阅读了 Microsoft 文档,但仍然找不到解决方案。任何帮助将不胜感激。我目前使用的是 .net core 6.0 和 AspNetCoreOdata 8.0.6。
您是否尝试过在构造函数中故意设置 属性?这还有一个额外的好处,即仍然允许您覆盖每个端点的默认页面大小。
public class EnableQueryWithDefaultPageSizeAttribute : EnableQueryAttribute
{
public EnableQueryWithDefaultPageSizeAttribute()
{
this.PageSize = 100;
}
}
我认为 .Net 5/6 中的问题是分页行为需要从 Edm 中解决,而不是从单个查询中解决,这是对 .Net FX 实现的重大更改,您可以在per-request 基础。