Reputation: 619
I have some working code:
using (var client = new HttpClient())
{
HttpResponseMessage response;
response = client.PostAsync(Url, new StringContent(Request, Encoding.UTF8, header)).Result;
}
// the above works fine for a simple header, e.g. "application/json"
What do I do, if I want to have multiple headers? E.g. adding "myKey", "foo" pair and "Accept", "image/foo1"
If I try adding the following before the .Result line, intellisense complains (the word 'Headers' is in red with "Can't resolve symbol 'Headers'":
client.Headers.Add("myKey", "foo");
client.Headers.Add("Accept", "image/foo1");
Upvotes: 30
Views: 40058
Reputation: 5265
You can also use
var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("headername","headervalue");
If you want to just set the headers on the HttpClient class just once. Here is the MSDN docs on DefaultRequestHeaders.TryAddWithoutValidation
Upvotes: 7
Reputation: 2424
I stopped using the Post/Get *Async methods in favor of the SendAsync(...)
method and HttpRequestMessage
Send Async is the big brother which allows you the full flexibility you otherwise can't achieve.
using System.Net.Http;
var httpRequestMessage = new HttpRequestMessage();
httpRequestMessage.Method = httpMethod;
httpRequestMessage.RequestUri = new Uri(url);
httpRequestMessage.Headers
.UserAgent
.Add(new Headers.ProductInfoHeaderValue(
_applicationAssembly.Name,
_applicationAssembly.Version.ToString()));
HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");
switch (httpMethod.Method)
{
case "POST":
httpRequestMessage.Content = httpContent;
break;
}
var result = await httpClient.SendAsync(httpRequestMessage);
result.EnsureSuccessStatusCode();
Upvotes: 26
Reputation: 50018
You can access the Headers
property through the StringContent
:
var content = new StringContent(Request, Encoding.UTF8, header);
content.Headers.Add(...);
Then pass the StringContent to the PostAsync
call:
response = client.PostAsync(Url, content).Result;
Upvotes: 45