使用HttpClient
时,我已阅读了使用DefaultRequestHeaders
设置Post请求的内容类型(例如“ application / json”)的示例(例如this example)。
我试图做这样的事情,但是失败了。我正在发送请求的API
抱怨说它被发送了“不受支持的类型”(当内容类型未设置为json
时,它表示该状态)。
此后,我添加了一行,并解决了该问题(您可以在下面的代码中看到该行的注释)。
我的问题是,为什么这行是必需的?而且,如果我包括这一行(即设置 content 的内容类型),则不需要“默认请求标头”设置。这个“默认请求标头”在做什么?
(我实际上尝试并评论了与DefaultRequestHeaders
相关的行,并且毫无问题。DefaultRequestHeaders
有什么用?)
我的代码是:
// Get the bytes for the request, should be pre-escaped
byte[] bytes = Encoding.UTF8.GetBytes(jsonEmployeeData);
client.BaseAddress = new Uri("the address here");
// client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("customHeader", "blahblahblah");
ByteArrayContent byteContent = new ByteArrayContent(bytes); //Make a new instance of HttpContent (an abstract class that can't be instantiated)
//THIS is the solution
//byteContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json"); //If I UNCOMMENT THIS, IT WORKS!!
try
{
HttpResponseMessage response = await client.PostAsync("staff", byteContent);
Console.WriteLine(response.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Something happened, oopps!" + ex.Message);
}
Console.WriteLine("Press any key");
Console.ReadLine();
client
就是HttpClient
。
答案 0 :(得分:0)
您调用的API需要的请求内容为 application / json 格式,因此您必须在内容中指定此格式。这就是为什么该行代码是您需要的:
byteContent.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json");
关于该行:
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"))
这是请求 Accept 标头,它表示服务器希望返回给您的响应的内容类型。 (您可以期望服务器返回其他内容类型,例如text / plain,...)。希望这可以帮助!