odata - 从 .NET OData 4 客户端调用嵌套 Expand() 的正确方法

标签 odata wcf-data-services asp.net-web-api astoria wcf-data-services-client

问题

在 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/

相关文章:

c# - OData 客户端 $expand 不工作

需要 odata v4 搜索示例

wcf - WCF 服务、WCF RIA 服务和 WCF 数据服务之间的区别

c# - WEB API 路由错误发现多个操作与具有不同 API 路径的请求相匹配

asp.net-web-api - 来自 Word Web 加载项 (Office.Js) 的 API 调用不起作用 : CORS Issue?

wcf - 我应该使用 OData 还是开发自己的 WCF 服务?

json - Odata查询Outlook Rest API

c# - config.DataServiceBehavior.MaxProtocolVersion 从 V3.0 到 V2.0 的更改无法恢复

c# - Wcf数据服务投影及查询方法

c# - 生成由操作过滤器控制的 PDF?