使用MVC ODataController时更改支持的OData协议版本

时间:2013-11-08 06:43:41

标签: .net asp.net-mvc entity-framework odata

我正在使用带有MVC的VS2013并公开一个简单的ODataController。

事实上,我基本上遵循了这里的教程:http://blogs.msdn.com/b/webdev/archive/2013/01/29/getting-started-with-asp-net-webapi-odata-in-3-simple-steps.aspx

我正在尝试使用odata4j在android上使用该服务,目前遇到的问题是odata元数据报告它只支持协议的3.0版本(min + max),如下所示: -

 <edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0">

我尝试在WebApiConfig.cs文件中的EdmModel中更改此内容。

 ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
 builder.DataServiceVersion = new Version(2, 0);
 builder.EntitySet<Product>("Products");

这会修复$元数据响应,但由于响应标头报告以下内容而不够深入(注意DataServiceVersion仍为3.0)。

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/xml; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
DataServiceVersion: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 08 Nov 2013 06:20:40 GMT
Content-Length: 1457

我是在这里咆哮错误的树还是有适当的方法来调整服务的支持OData协议版本?

3 个答案:

答案 0 :(得分:0)

尝试在请求中添加DataServiceVersion标头:

GET /odata/Customers HTTP/1.1
Host: localhost:42980
Connection: keep-alive
DataServiceVersion: 2.0
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64)...
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
DataServiceVersion: 2.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 11 Nov 2013 05:51:51 GMT
Content-Length: 24

答案 1 :(得分:0)

缺乏更好的答案:

您可以通过操纵控制器中的request headers覆盖标头值,具体取决于OData扩展代码设置标头的方式。 这不是正确的解决方案,仅仅是解决方法。即使有效,也不要接受它。

PS:如果您在此处未收到正确的答案,您可能想要询问信息directly from the developers,或者只是阅读code,以确定该标头的设置方式和无论你或他们做错了什么(因为在我看来你并不是很明显)。

答案 2 :(得分:0)

OData v4使用新的标头名称来传达请求的OData版本。

来自What’s New in OData Version 4.0

  

OData-Version 替换了以前的 DataServiceVersion
   OData-MaxVersion 替换了 MaxDataServiceVersion ,...

v4引入了许多其他更改。

因此,用OData v4来说,仅修改标题中的版本号是不够的。
相反,您必须使用其他Nuget软件包:

对于OData v1到v3:
使用版本5.x中附带的OData Nuget软件包 Microsoft.AspNet.WebApi.OData

对于OData v4:
使用版本号为7.x或更高版本的最新OData Nuget软件包 Microsoft.AspNet.OData