1

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

其实我基本上是按照这里的教程来的:http: //blogs.msdn.com/b/webdev/archive/2013/01/29/getting-started-with-asp-net-webapi-odata-in-3-简单的步骤.aspx

我正在尝试使用 odata4j 在 android 上使用该服务,目前遇到了一个问题,即 odata 元数据报告它仅支持 3.0 版本的协议(最小 + 最大),如下所示:-

 <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");

这修复了 $metadata 响应但不够深入,因为响应标头报告以下内容(注意 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 协议版本?

4

3 回答 3

0

由于缺乏更好的答案:

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

PS:如果您在这里没有收到正确的答案,您可能想直接向开发人员询问信息,或者只是阅读代码,以确定该标头的设置方式以及您或他们是否做错了什么(因为在我看来,你并不明显)。

于 2013-11-12T09:51:13.307 回答
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
于 2013-11-11T08:05:58.913 回答
0

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

来自OData 版本 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 。

于 2018-10-18T15:15:22.470 回答