数据全局页面大小

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 基础。