首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除.NET核心中的Content-Type标头

删除.NET核心中的Content-Type标头
EN

Stack Overflow用户
提问于 2017-05-10 19:04:32
回答 1查看 1.8K关注 0票数 0

我在.Net核心中有以下代码:

代码语言:javascript
运行
复制
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 (带有.Net核心1.0.4的Ubuntu16.04服务器)上运行相同的代码时,我收到来自Dropbox API的以下错误消息:

代码语言:javascript
运行
复制
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核心中,这个头会自动添加到我的请求中。

在Windows和Linux上打印请求头的结果是相同的:

代码语言:javascript
运行
复制
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核心自动添加Content-Type头?

我尝试过的:

1设置空的Content-Type标头:

代码语言:javascript
运行
复制
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "");

将不起作用,即使我将header的值设置为"application/json“,它也会自动更改为application/x-www-form-urlencoded :(

2删除整个标题:

代码语言:javascript
运行
复制
request.Headers.Remove("Content-Type");

或者:

代码语言:javascript
运行
复制
client.DefaultRequestHeaders.Remove("Content-Type");

在这两种情况下,我都收到以下异常:

代码语言:javascript
运行
复制
Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.'
EN

回答 1

Stack Overflow用户

发布于 2021-12-01 16:59:36

你正在写一篇文章。这将为通常所需的正文添加默认的内容类型。

不清楚规范是否要求主体,但这是POST而不是GET的要点,有时会按要求实现(当然,它可能是空白的)。有鉴于此,我怀疑.net总是添加一个内容类型的头部来赋予主体含义。https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

可能这个请求应该是一个不需要主体的GET。还可能有其他方法来发出请求,这些方法可以更好地控制请求的构造。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43890647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档