snippetcsharpCritical
How to set the Content-Type header for an HttpClient request?
Viewed 0 times
howrequestsetheadertheforhttpclientcontenttype
Problem
I'm trying to set the
I tried setting the
It allows me to add the
Misused header name. Make sure request headers are used with
content headers with
How can I set the
Content-Type header of an HttpClient object as required by an API I am calling.I tried setting the
Content-Type like below:using (var httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("http://example.com/");
httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
httpClient.DefaultRequestHeaders.Add("Content-Type", "application/json");
// ...
}It allows me to add the
Accept header but when I try to add Content-Type it throws the following exception:Misused header name. Make sure request headers are used with
HttpRequestMessage, response headers with HttpResponseMessage, andcontent headers with
HttpContent objects.How can I set the
Content-Type header in a HttpClient request?Solution
The content type is a header of the content, not of the request, which is why this is failing.
AddWithoutValidation as suggested by Robert Levy may work, but you can also set the content type when creating the request content itself (note that the code snippet adds application/json in two places-for Accept and Content-Type headers):HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://example.com/");
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "relativeAddress");
request.Content = new StringContent("{\"name\":\"John Doe\",\"age\":33}",
Encoding.UTF8,
"application/json");//CONTENT-TYPE header
client.SendAsync(request)
.ContinueWith(responseTask =>
{
Console.WriteLine("Response: {0}", responseTask.Result);
});Code Snippets
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://example.com/");
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "relativeAddress");
request.Content = new StringContent("{\"name\":\"John Doe\",\"age\":33}",
Encoding.UTF8,
"application/json");//CONTENT-TYPE header
client.SendAsync(request)
.ContinueWith(responseTask =>
{
Console.WriteLine("Response: {0}", responseTask.Result);
});Context
Stack Overflow Q#10679214, score: 1459
Revisions (0)
No revisions yet.