Asp.net web api 如何修改OData查询结果中的下一个链接

Asp.net web api 如何修改OData查询结果中的下一个链接,asp.net-web-api,pagination,odata,iqueryable,Asp.net Web Api,Pagination,Odata,Iqueryable,我有一个使用.NET4.5的ODataWebAPI服务。它有一个从EntitySetController派生的WebApi控制器: public class WorkItemsController : EntitySetController<WorkItem, string> { [Queryable(PageSize=100)] public override IQueryable<WorkItem> Get() { // go

我有一个使用.NET4.5的ODataWebAPI服务。它有一个从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
    }
}
公共类工作项控制器:EntitySetController
{
[可查询(PageSize=100)]
公共覆盖IQueryable Get()
{
//转到AWS DynamoDb,获取工作项,然后返回
}
}
如您所见,我将服务器端页面大小设置为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。

应用ODataQueryOptions后,您可以在请求的ODataProperties中设置下一个链接,如下所示:

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
    }
}
公共类工作项控制器:EntitySetController
{
公共覆盖IQueryable Get(ODataQueryOptions查询选项)
{
//转到AWS DynamoDb,获取工作项,然后返回
IQueryable工作项=。。。。;
var设置=新ODataQuerySettings{PageSize=100};
工作项=查询选项.ApplyTo(工作项,设置);
//在这里覆盖下一个链接
//获取或设置Request.ODataProperties().NextLink
}
}

Hi Feng,谢谢你的建议。但我没有根据请求找到ODataProperty()。我使用的是OData5.6。它是一个扩展方法,名称空间为“System.Web.Http.OData.Extensions”