C# HttpRequestMessage设置Content-Type无效,请求返回内容类型错误
解决方法
问题根源
你的代码存在几个关键问题:
- 重复设置Authorization头:已经通过
client.DefaultRequestHeaders.Authorization完成配置,没必要在HttpRequestMessage.Headers里重复添加。 - 错误设置Content-Type头:
Content-Type属于请求内容的专属头,不能直接加到HttpRequestMessage.Headers中,必须通过请求内容(比如StringContent)来指定。 - 未指定StringContent的媒体类型:默认创建的
StringContent会使用text/plain作为Content-Type,这就是服务器返回"Invalid content type (text/plain)"的直接原因。
正确代码示例
按照文档要求发送空JSON对象({})并正确配置Content-Type,修改后的代码如下:
var client = new HttpClient(handler); string token = "..."; // 只需设置一次Authorization头 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", token); var httpRequestMessage = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri("..."), // 创建StringContent时明确指定媒体类型为application/json Content = new StringContent("{}", Encoding.UTF8, "application/json") }; var response = await client.SendAsync(httpRequestMessage); var contents = await response.Content.ReadAsStringAsync();
补充说明
- 如果确实需要发送空请求体(而非空JSON对象),但服务器要求Content-Type为application/json,可使用以下写法:
但根据你提到的文档要求,优先使用发送空JSON对象Content = new StringContent(string.Empty, Encoding.UTF8, "application/json"){}的写法。 - 无需手动设置
ContentLength头,HttpClient会自动根据内容长度计算并配置。
内容的提问来源于stack exchange,提问作者Jebathon
相关产品推荐
相关产品推荐

