问题
在 Web API 上的 OData 4 服务中,从 .NET 客户端调用嵌套 $expand 的正确方法是什么?我们正在使用 OData Client Generator .回到之前的 WCF 数据服务和 OData 3 服务,我们可以调用 .Expand("Customers/Orders")
.在带有 OData 4 的 Web API 中,如果您尝试 .Expand("Customers/Orders")
,我们将无法再这样做并收到以下信息:
The query specified in the URI is not valid. Found a path traversing multiple navigation >properties. Please rephrase the query such that each expand path contains only type >segments and navigation properties.
解决方法
我们可以通过像这样调用 expand 来解决这个问题:
.Expand("Customers($expand=Orders)")
.在非嵌套的 $expand 场景中,我喜欢这样的 lambda 支持 .Expand(d => d.Customers)
.在 .NET OData 4 客户端中是否有正确的方法来调用嵌套扩展而不使用 .Expand("Customers($expand=Orders)")
的不幸魔法字符串? ?如果没有,是否有像“客户/订单”这样的更清晰的字符串模式可以工作?谢谢。
最佳答案
在 OData v4 中,扩展多级是无效的,例如您在问题中提到的:.Expand("Customers/Orders")。我不认为客户端会支持这样的 API。这是 ABNF 中的内容 http://docs.oasis-open.org/odata/odata/v4.0/os/abnf/odata-abnf-construction-rules.txt :
expand = '$expand' EQ expandItem *( COMMA expandItem )
expandItem = STAR [ ref / OPEN levels CLOSE ]
/ expandPath
[ ref [ OPEN expandRefOption *( SEMI expandRefOption ) CLOSE ]
/ count [ OPEN expandCountOption *( SEMI expandCountOption ) CLOSE ]
/ OPEN expandOption *( SEMI expandOption ) CLOSE
]
expandPath = [ qualifiedEntityTypeName "/" ]
*( ( complexProperty / complexColProperty ) "/" [ qualifiedComplexTypeName "/" ] )
navigationProperty
[ "/" qualifiedEntityTypeName ]
关于odata - 从 .NET OData 4 客户端调用嵌套 Expand() 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246865/