OData v4多级$expand路径式展开疑问及异常排查
OData v4中$expand路径语法的规则解析
你的假设完全正确:OData v4里$expand的斜杠路径语法仅支持遍历复杂属性(Complex Property),不能用于导航属性(Navigation Property)的多级展开,也不能跨导航属性+复杂属性使用斜杠路径。
为什么Friends/Trips会报错
Friends是指向Person实体集合的导航属性,Trips是Person实体下指向Trip实体集合的导航属性。OData v4规范明确禁止在$expand的单一路径中连续遍历多个导航属性,必须用嵌套的($expand=...)语法来实现导航属性的多级展开,也就是你之前成功的写法:
http://services.odata.org/v4/TripPinServiceRW/People('russellwhyte')?$expand=Friends($expand=Trips)
为什么Friends/AddressInfo也报错
首先纠正拼写:应该是AddressInfo而非AdressInfo。但即使拼写正确,这个写法依然违反规则——Friends是导航属性,斜杠路径语法不允许直接从导航属性出发,用斜杠连接后续的复杂属性。正确的写法同样需要用嵌套$expand:
http://services.odata.org/v4/TripPinServiceRW/People('russellwhyte')?$expand=Friends($expand=AddressInfo)
核心规则总结
- 斜杠
/路径:仅适用于同一实体/复杂类型内部的复杂属性层级遍历,比如当前Person实体的AddressInfo/Country这种复杂属性嵌套。 - 嵌套
($expand=...):用于处理导航属性的后续展开,无论是下级导航属性还是下级复杂属性,都必须通过这种嵌套方式声明。
内容的提问来源于stack exchange,提问作者charlycou
相关产品推荐
相关产品推荐

