【问题标题】:how to modify the next link in OData query result如何修改 OData 查询结果中的下一个链接
【发布时间】:2014-08-09 03:16:45
【问题描述】:

我有一个使用 .NET 4.5 的 OData Web API 服务。它有一个从 EntitySetController 派生的 WebApi 控制器:

public class WorkItemsController : EntitySetController<WorkItem, string>
{
    [Queryable(PageSize=100)]
    public override IQueryable<WorkItem> Get()
    {
         // go to AWS DynamoDb, get the workitems and then return
    }
}

如您所见,我将服务器端页面大小设置为 100。如果对象超过 100 个,则返回将包含如下链接:

<link rel="next" href="http://***/api/v1/WorkItems?$skip=100" />

这适用于 Microsoft SQL。但我正在使用 DynamoDb。 “skip=100”无法转换为 DynamoDb LastEvaluatedKey。所以在这里我想修改下一个链接,让它像这样返回 LastEvaluatedKey:

<link rel="next" href="http://***/api/v1/WorkItems?$skip=A12BSD123" />

所以基本上我想要自定义链接的能力。因此,当用户想要获取下一组时,他/她只需要使用此链接,我就可以从中获取 LastEvaluatedKey。

【问题讨论】:

    标签: asp.net-web-api pagination odata iqueryable


    【解决方案1】:

    您可以在应用 ODataQueryOptions 后在 Request 的 ODataProperties 中设置 NextLink,如下所示:

    public class WorkItemsController : EntitySetController<WorkItem, string>
    {
        public override IQueryable<WorkItem> Get(ODataQueryOptions queryOptions)
        {
             // go to AWS DynamoDb, get the workitems and then return
             IQueryable workitems = ....;
             var settings = new ODataQuerySettings { PageSize = 100 };
             workitems = queryOptions.ApplyTo(workitems, settings);
    
             // Override the NextLink here
             // Get or Set Request.ODataProperties().NextLink
        }
    }
    

    【讨论】:

    • 你好冯,谢谢你的建议。但我没有在请求中找到 ODataProperties()。我正在使用 OData 5.6。
    • 这是一个扩展方法,命名空间为“System.Web.Http.OData.Extensions”
    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多