使用 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;
我正在尝试在 .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;