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");
In versions pre 4.3 of HttpClient, we can set any custom header on a request with a simple setHeader call on the request: HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(SAMPLE_URL); request. setHeader(HttpHeaders. CONTENT_TYPE, "application/json"); client.
HttpClient client = new HttpClient(); client. DefaultRequestHeaders. Add("Accept", "application/json");
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;
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();
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With