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

时间:2016-10-26 23:17:06

标签: c# .net asp.net-core dotnet-httpclient

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

无论我如何尝试,我都无法确定将Content-Type标头设置为仅应用程序/ json

当我使用

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

它发送HTTP GET请求:

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

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

时才有效
Content-Type: application/json

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

使用解决方法进行编辑

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

2 个答案:

答案 0 :(得分:5)

您正在设置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;

答案 1 :(得分:0)

如果您是客户并执行GET请求,您如何指定Content-Type?它不应该说出你能够Accept的能力吗?根据此7.2.1 Type,您只能在Content-Type时设置Body