Odata asp.net core 2.2 Web API分页

问题描述 投票:1回答:1

是否可以通过客户端发送的查询参数来处理页面大小。而不是默认代码中的Enablequery(Pagesize = 100)

asp.net-core odata
1个回答
0
投票

是否可以通过客户端发送的查询参数来处理页面大小。而不是默认代码中的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

© www.soinside.com 2019 - 2024. All rights reserved.