如何在使用HttpClient时不排除Content-Type中的字符集

本文关键字:Content-Type 排除 字符集 HttpClient | 更新日期: 2023-09-27 18:15:13

我正试图在.net核心项目中使用HttpClient向接受/返回JSON的REST服务发出GET请求。我不控制外部服务。

无论我如何尝试,我都无法将Content-Type标头设置为application/json,仅

当我使用时

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

它发送HTTP GET请求:

Content-Type: application/json; charset=utf-8

但是,此特定服务不适用于此。只有当标题为:时,它才会工作

Content-Type: application/json

我尝试过在没有验证的情况下设置标题,但我在web/SO上找到的所有方法都不适用于.net核心。所有其他发送HTTP请求的方法在.net核心中都不可用,所以我需要弄清楚这一点。如何排除内容类型中的字符集?

使用变通方法编辑

正如答案中提到的,服务应该使用Accept标头。解决方法(正如Shaun Luttin在回答中所说(是在GET中添加一个空内容(什么?GET没有内容!是的…(。这不好看,但确实有效。

如何在使用HttpClient时不排除Content-Type中的字符集

您正在设置Accept标头。您需要设置ContentType标头,这只是POST的规范。

var client = new HttpClient();
var content = new StringContent("myJson");
content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
var result = client.PostAsync("http://bigfont.ca", content).Result;

如果你真的想把它设置为GET,你可以这样做:

var client = new HttpClient();
var message = new HttpRequestMessage(HttpMethod.Get, "http://www.bigfont.ca");
message.Content = new StringContent(string.Empty);
message.Content.Headers.Clear();
message.Content.Headers.Add("Content-Type", "application/json");
var result = client.SendAsync(message).Result;

如果您是客户端并执行GET请求,如何指定Content-Type?它不是应该说你能对Accept做什么吗?根据这个7.2.1类型,只有当有Body时,才能设置Content-Type