Odata ASP.NET Core 2.2 Web API分页

时间:2019-12-28 20:53:54

标签: asp.net-core odata

有什么方法可以处理客户端发送的查询参数中的页面大小。而不是代码中默认的Enablequery(Pagesize = 100)

1 个答案:

答案 0 :(得分:1)

  

有什么方法可以处理客户端发送的查询参数中的页面大小。而不是代码中默认的Enablequery(Pagesize = 100)

要达到上述要求,您可以尝试创建和使用自定义的EnableQueryAttribute,如下所示:

在自定义的EnableQueryAttribute中

public class MyCustomQueryableAttribute : EnableQueryAttribute
{
    public override IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)
    {
        // dynamically set PageSize of ODataQuerySettings 
        // based on pagesize that client sent through querystring

        StringValues ps;

        // set default value to pagesize

        int pagesize = 2;

        if (queryOptions.Request.Query.TryGetValue("pagesize", out ps))
        {
            pagesize = int.Parse(ps);
        }

        var result = queryOptions.ApplyTo(queryable, new ODataQuerySettings { PageSize = pagesize });
        return result;
    }
}

在ODataController动作中

[MyCustomQueryable]
public IActionResult Get()
{
    return Ok(_db.Books);
}

测试结果

enter image description here