我在.Net Core中有以下代码:
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + _accessToken);
client.DefaultRequestHeaders.TryAddWithoutValidation("Dropbox-API-Arg", GenerateJsonFromObject(new {path = filePath}));
var request = new HttpRequestMessage(HttpMethod.Post, "https://content.dropboxapi.com/2/files/download");
var result = client.SendAsync(request).Result;
}
正如您所看到的那样,它非常简单,并且可以正常运行,但仅限于Windows。 当我在Linux VPS(带有.Net Core 1.0.4的Ubuntu 16.04服务器)上运行相同的代码时,我收到来自Dropbox API的以下错误消息:
Error in call to API function "files/download": You provided a non-empty HTTP "Content-Type" header ("application/x-www-form-urlencoded"). This API function requires that the header be missing or empty.
因此API需要空的或空的Content-Type标头,但在.Net Core中,这个标头会自动添加到我的请求中。
打印请求标题的结果在Windows和Linux上是相同的:
Method: POST, RequestUri: 'https://content.dropboxapi.com/2/files/download', Version: 1.1, Content: <null>, Headers:
{
Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Dropbox-API-Arg: {"path":"/tracklogs/night_ride.gpx"}
}
所以我的问题是: 如何避免.Net Core自动添加Content-Type标题?
我尝试过的事情:
1设置一个空的Content-Type标题:
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "");
无法工作,即使我将标题的值设置为&#34; application / json&#34;它会自动更改为application / x-www-form-urlencoded :(
2删除整个标题:
request.Headers.Remove("Content-Type");
或:
client.DefaultRequestHeaders.Remove("Content-Type");
在这两种情况下,我都收到以下例外:
Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.'