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

How do I not exclude charset in Content-Type when using HttpClient?

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

无论我如何尝试,我都无法想出将 Content-Type header 设置为 application/json 只有

当我使用

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

它在 HTTP GET 请求中发送:

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

但是,此特定服务不适用于此。它仅在 header 为:

时有效
Content-Type: application/json

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

使用解决方法进行编辑

如答案中所述,该服务应使用 Accept header。解决方法(正如 Shaun Luttin 在他的回答中所做的那样)是向 GET 添加一个空内容(什么?GET 没有内容!是的......)。它不漂亮,但确实有效。

如果您是客户并且执行 GET 请求,您如何指定 Content-Type?不是应该说你的能力 Accept 吗?根据这个7.2.1 Type你只能设置Content-Type当有Body.

您正在设置 Accept header。您需要改为设置 ContentType header,这仅适用于 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;