如何从元数据中找到OData版本

sag*_*sag 8 rest odata

我可以访问OData服务.现在我需要找到该服务的OData版本.$ metadata中有版本属性.但我不知道要哪一个拿起.

我需要把它从<edmx:Edmx Version="1.0">DataServiceVersionHTTP标头

例如,

  1. http://services.odata.org/v4/%28S%28cy2mvwlr34teasunjfqlhlyg%29%29/TripPinServiceRW/ $ metadata将Version作为4.0返回,但在响应中不包含DataServiceVersion.但它有OData Version HTTP标头

  2. http://services.odata.org/OData/OData.svc/ $ metadata将Version返回1.0,DataServiceVersion返回3.0.这不包含OData版本HTTP标头.但它有DataServiceVersion HTTP标头

  3. http://services.odata.org/V3/Northwind/Northwind.svc/ $ metadata将Version返回1.0,DataServiceVersion返回1.0.这不包含OData版本HTTP标头.但它有DataServiceVersion HTTP标头

请告诉我如何使用服务元数据找到OData版本?或者还有其他方法可以找到它吗?

mit*_*tch 12

根据OASIS标准,每个例子:

  1. V4现在需要设置Version在上EDMX元素

对于示例2和3,您需要阅读有关版本控制的说明,其中说明:

OData协议支持版本控制方案,使服务能够公开新功能和格式化版本,而不会破坏与旧客户端的兼容性.

OData请求和响应可以根据DataServiceVersion Header进行版本控制.

OData客户端应该使用MinDataServiceVersion和MaxDataServiceVersion头来指定可接受的响应DataServiceVersions的范围.

服务应该响应服务支持的最大版本小于或等于指定的MaxDataServiceVersion.

你会注意到OData实现方面的东西是疯狂的西方(很多MAYSHOULD.就上面的例子如何符合这个规范而言:

  1. V2指定了Version必须1.0,但该DataServiceVersion必须的OData协议的版本来消耗服务所需,并之一['1.0','2.0','3.0'],按规格.
  2. 该服务声称支持OData客户端v1-v3.因此,客户可以提交自己DataServiceVersion的请求1.0,2.0或者3.0仍然收到符合给定版本标准的响应.

因此,根据您要连接的服务,您需要进行不同的检查.也许流程如下:

  1. 检查<edmx:Edmx />版本是否4.0(你知道OData v4)
  2. 否则,检查是否<edmx:DataServices />MaxDataServiceVersion属性(您现在有最高的可用OData版本)
  3. 否则,检查是否<edmx:DataServices />MinDataServiceVersion属性(您现在拥有最低支持的OData版本)
  4. 否则,检查是否<edmx:DataServices />DataServiceVersion属性(您现在拥有最低支持的OData版本)