带有 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 查询选项与 WebAPI 和 ViewModel 一起使用