使用OData和$expand的Web Api 2.2

18

我正在使用codefirst和odata。 我已经设置了我的模型和关系。 查询似乎已经成功运行。 当展开嵌套数据时,只有在使用$expand时才会出现问题。 我遵循了微软网站上的以下链接。 因此,我可以成功执行以下操作:

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

现在如果我决定使用以下查询进一步深入

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

我遇到了以下错误:

在URI中指定的查询无效。找到穿越多个导航属性的路径。请重新构造查询,使每个扩展路径仅包含类型段和导航属性。

如果您访问上面的链接,评论中似乎有人遇到相同的问题。我敢肯定我之前使用的 odata 和 Web Api 版本可以正常工作。

1个回答

38
我在找到这个问题后找到了答案。@Rama提供了答案。我建议微软更新上面列出的链接中的文档。因此,不要使用原来的:
http://myurl.com/odata/catagories?$expand=Product/Supplier

你宁愿使用

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

2
正式的语法适用于OData V3,但后来适用于V4。 - Karata
3
斜线符号是ODATA V4中的一种符号表示方法:http://docs.oasis-open.org/odata/odata/v4.0/errata01/os/complete/part2-url-conventions/odata-v4.0-errata01-os-part2-url-conventions-complete.html#_Toc395267179 - Jerther
2
特别糟糕,因为微软声称正在实现OData v4,并且OData4客户端库将使用斜杠方法发出请求。微软应该更新嵌套扩展的实现,而不是更新文档。 - Jamie Butler
@JamieButler 这并不是事实。根据标准,斜杠语法仅用于复杂类型(没有键的类型),而微软的实现支持这种语法。 - lauxjpn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接