【发布时间】:2021-05-12 23:04:30
【问题描述】:
问题
在 Web API 上的 OData 4 服务中,从 .NET 客户端调用嵌套 $expand 的正确方法是什么?我们正在使用OData Client Generator。回到之前的带有 OData 3 服务的 WCF 数据服务,我们可以调用 .Expand("Customers/Orders")。在带有 OData 4 的 Web API 中,如果您尝试 .Expand("Customers/Orders"),我们将无法再这样做并收到以下信息:
URI 中指定的查询无效。找到了一个遍历多个导航 > 属性的路径。请改写查询,使每个展开路径仅包含类型 >segments 和导航属性。
解决方法
我们可以通过调用 expand 来解决这个问题:.Expand("Customers($expand=Orders)")。在非嵌套的 $expand 场景中,我喜欢像 .Expand(d => d.Customers) 这样的 lambda 支持。 .NET OData 4 客户端中是否有适当的方法来调用嵌套扩展而没有不幸的.Expand("Customers($expand=Orders)") 魔术字符串?如果没有,是否有像“客户/订单”这样更简洁的字符串模式可以使用?谢谢。
【问题讨论】:
-
在OData v3场景下可以看到这个MS recommendation。
-
感谢 .NET OData 4 客户端的解决方法: .Expand("Customers($expand=Orders)") 在 url 中,您可以像这样使用它: ?$expand=Customers($ expand=Orders) 参考:stackoverflow.com/a/28492946/2908623
标签: odata wcf-data-services asp.net-web-api astoria wcf-data-services-client