首页 > 解决方案 > Odata asp.net core 2.2 web api分页

问题描述

有没有办法从客户端发送的查询参数中处理页面大小。而不是代码中的默认值 Enablequery(Pagesize = 100)

标签: asp.net-coreodata

解决方案


有没有办法从客户端发送的查询参数中处理页面大小。而不是代码中的默认值 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);
}

测试结果

在此处输入图像描述


推荐阅读