【问题标题】:OData pagination with WebApi ( $inlinecount )使用 WebApi ( $inlinecount ) 进行 OData 分页
【发布时间】:2012-05-29 04:57:31
【问题描述】:

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

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

【问题讨论】:

  • 请注意,当用户阅读页面时,项目的总数可能会发生变化。例如,如果列表中的“项目”是 SO 问题的答案,那么在用户到达列表末尾之前,这个数字可能已经从 20 增加到 30。这使得总页数有些不确定。

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


【解决方案1】:

试试这个方法: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 支持开箱即用时,这个解决方案可能是最好的选择。

【讨论】:

    【解决方案2】:

    您可以在查询中使用$inlinecount=allpages 来获取结果中没有顶部的所有实体的计数并跳过。例如:

    http://services.odata.org/OData/OData.svc/Products?$top=1&skip=1&$inlinecount=allpages

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

    【讨论】:

    • 谢谢,但找到了以下链接,因为它声明不支持开箱即用 -> thedevstop.wordpress.com/2012/04/05/…
    • 尝试使用 Microsoft.AspNet.WebApi.OData 版本 0.1.0-alpha-120815 返回 400 - {"Message":"查询参数 '$inlinecount' 不受支持。"}
    • $inlinecount 已弃用。在这里查看我的答案:stackoverflow.com/a/31004759/331281
    • 您忘记了参数“skip”上的“$”符号
    【解决方案3】:

    上周我遇到了确切的问题。 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 支持。

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 2013-03-03
      • 2013-08-28
      • 2013-03-12
      • 2014-09-05
      相关资源
      最近更新 更多