带有 odata 和 $expand 的 Web Api 2.2

Posted

技术标签:

【中文标题】带有 odata 和 $expand 的 Web Api 2.2【英文标题】:Web Api 2.2 with odata and $expand 【发布时间】:2015-01-03 03:28:54 【问题描述】:

我将 codefirst 与 odata 一起使用。我已经设置了我的模型和关系。查询似乎运行成功。我只是在扩展嵌套数据时使用 $expand 时遇到问题。我在微软网站上关注了以下link。所以我可以成功地做到以下几点

http://myurl.com/odata/catagories?$expand=Product

现在,如果我决定使用以下查询更深入地了解

http://myurl.com/odata/catagories?$expand=Product/Supplier

我收到以下错误

URI 中指定的查询无效。找到遍历多个导航属性的路径。请改写查询,使每个展开路径仅包含类型段和导航属性。

如果您访问上面的链接,那么 cmets 中的某个人似乎也遇到了同样的问题。我可以发誓我得到了这个与以前版本的 odata 和 Web Api 一起工作。

【问题讨论】:

【参考方案1】:

找到这个question后我找到了答案。 @Rama 提供了答案。我建议微软在上面列出的链接上更新他们的文档。所以不是

http://myurl.com/odata/catagories?$expand=Product/Supplier

你宁愿使用

http://myurl.com/odata/catagories?$expand=Product($expand=Supplier)

【讨论】:

正式语法适用于 OData V3,但后来适用于 V4 斜线表示法是 odata v4: docs.oasis-open.org/odata/odata/v4.0/errata01/os/complete/… 特别糟糕,因为微软声称它正在实现 OData v4,并且 OData4 客户端库将使用 Slash 方法发出请求。与其更新文档,微软应该更新他们的嵌套扩展实现。 @JamieButler 事实并非如此。根据标准,斜杠语法只用于复杂类型(没有键的类型),微软的实现支持。

以上是关于带有 odata 和 $expand 的 Web Api 2.2的主要内容,如果未能解决你的问题,请参考以下文章

odata - 结合 $expand 和 $select

OData $expand、DTO 和实体框架

将 ODATA $expand 查询选项与 WebAPI 和 ViewModel 一起使用

OData - 在 $expand 中的集合上嵌套 $filter

OData $filter 与 $expand 中的项目

ASP.NET C# OData 服务 + 导航属性 + $expand = null。我错过了啥?