首页 > 解决方案 > 如果我设置版本,OData 元数据 url 请求将失败

问题描述

以下代码获得 500:

WebRequest request =
  WebRequest.Create("https://services.odata.org/TripPinRESTierService/$metadata");
HttpWebRequest webRequest = request as HttpWebRequest;
webRequest.Accept = "application/atom+xml,application/xml";
request.Headers.Add("DataServiceVersion", "4.0");
request.Headers.Add("OData-MaxVersion", "4.0");
webRequest.AutomaticDecompression =
  DecompressionMethods.Deflate | DecompressionMethods.GZip;

// this throws the 500
var response = request.GetResponse();

但这成功了:

WebRequest request =
   WebRequest.Create("https://services.odata.org/TripPinRESTierService/$metadata");
HttpWebRequest webRequest = request as HttpWebRequest;
webRequest.Accept = "application/atom+xml,application/xml";
request.Headers.Add("OData-MaxVersion", "4.0");
webRequest.AutomaticDecompression =
  DecompressionMethods.Deflate | DecompressionMethods.GZip;
var response = request.GetResponse();

这会引发错误:

WebRequest request = 
  WebRequest.Create("https://services.odata.org/TripPinRESTierService/Airlines");
HttpWebRequest webRequest = request as HttpWebRequest;
webRequest.Accept = "application/atom+xml,application/xml";
request.Headers.Add("DataServiceVersion", "4.0");
request.Headers.Add("OData-MaxVersion", "4.0");
webRequest.AutomaticDecompression =
  DecompressionMethods.Deflate | DecompressionMethods.GZip;

// this throws the 500
var response = request.GetResponse();

请求元数据时我不应该指定 DataServiceVersion 有什么特别的地方吗?

标签: c#.netodataodatalib

解决方案


根据文档,OData 版本的标头是OData-Version,不是DataServiceVersion

根据我使用Postman的测试,这就是引发 500 错误的原因。

顺便说一句,考虑使用HttpClient代替WebClient,异步工作,并且比WebClient. 看到这个这个


推荐阅读