我正在使用OData对从web api调用返回的一长串项目进行分页。我可以通过url使用开始和结束索引过滤数据。
我的问题是,我怎么知道物品的总数?所以我可以在我的移动设备上显示第1页(共3项)(20项),该设备调用web api。
答案 0 :(得分:6)
这是一个工作版本的链接,它已被实现为QueryableAttribute。 http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/88372a0b4ab9#src%2fMicrosoft.Web.Http.Data%2fQueryFilterAttribute.cs
修改强> 使用此链接进行详细说明 - > http://www.strathweb.com/2012/08/supporting-odata-inlinecount-with-the-new-web-api-odata-preview-package/
答案 1 :(得分:3)
您可以在查询中使用$ inlinecount = allpages来获取结果中所有实体的计数,而不使用top和skip。例如:
http://services.odata.org/OData/OData.svc/Products $顶部= 1&安培;跳过= 1&安培; $ inlinecount =所有页
返回单个产品,但内联计数为9(因为实体集中有9个产品)。
答案 2 :(得分:3)
它使用最新的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支持。