使用WebApi进行OData分页($ inlinecount)

时间:2012-05-22 16:51:07

标签: c# asp.net pagination odata asp.net-web-api

我正在使用OData对从web api调用返回的一长串项目进行分页。我可以通过url使用开始和结束索引过滤数据。

我的问题是,我怎么知道物品的总数?所以我可以在我的移动设备上显示第1页(共3项)(20项),该设备调用web api。

4 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

您可以在查询中使用$ inlinecount = allpages来获取结果中所有实体的计数,而不使用top和skip。例如:

http://services.odata.org/OData/OData.svc/Products $顶部= 1&安培;跳过= 1&安培; $ inlinecount =所有页

返回单个产品,但内联计数为9(因为实体集中有9个产品)。

答案 2 :(得分:3)

尝试这种方法:http://www.strathweb.com/2012/08/supporting-odata-inlinecount-with-the-new-web-api-odata-preview-package/

它使用最新的Web API OData包。

直到最终的Web API OData包发货(今年秋天某个时候,应该在11月左右),当开箱即用支持$ inlinecount时,这个解决方案可能是最好的选择。

答案 3 :(得分:2)

我上周遇到了确切的问题。 Check out Extending your ASP.NET Web API responses with useful metadata

我使用这篇文章和示例代码来启动并使用OData运行分页网格。如示例中所详述,我创建了一个委托处理程序来捕获HttpResponseMessage并将其包装在包含项目计数的自定义元数据中。还创建了一个自定义属性CustomQueryableAttribute,它继承了默认的QueryableAttribute。

这听起来有点复杂但实际上很容易实现。我在大约30分钟内完成了一些事情。

希望未来版本的Web API具有更完整的OData支持。

编辑:Odata支持不会随Web API一起提供。正在删除RTM版本的可查询属性。通过单独的Nuget包,可以在初始重新启动后的某个时间提供更完整的OData支持。