我正在使用带有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协议版本?
答案 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 。