在使用时,我已经阅读了用于设置 Post 请求的内容类型(例如“application/json”)的HttpClient
示例(例如this example) 。DefaultRequestHeaders
我试图做这样的事情,但它失败了。我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
。