Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Modify request headers per request C# HttpClient PCL

I'm currently using the System.Net.Http.HttpClient for cross platform support.

I read that it is not a good practice to instantiate a HttpClient object for each request and that you should reuse it whenever possible.

Now I have a problem while writing a client library for a service. Some API calls need to have a specific header, some MUST not include this specific header.

It seems that I can only manipulate the "DefaultRequestHeaders" which will be send with each request.

Is there an option when actually making the request with e.g. "client.PostAsync()" to modify the headers only for the specific request?

(Info: Requests can be multi threaded).

Thanks in advance!

like image 338
coalmee Avatar asked May 07 '14 15:05

coalmee


People also ask

How to pass header in rest api in c#?

var client = new RestClient("http://url.../token"); var request = new RestRequest(Method. POST); request. AddHeader("content-type", "application/x-www-form-urlencoded"); request. AddParameter("application/x-www-form-urlencoded", "grant_type=password&username=username&password=password", ParameterType.

How do I pass HttpClient headers?

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.


2 Answers

Yes, you can create a new HttpRequestMessage, set all the properties you need to, and then pass it to SendAsync.

var request = new HttpRequestMessage() {
   RequestUri = new Uri("http://example.org"),
   Method = HttpMethod.Post,
   Content = new StringContent("Here is my content")
}
request.Headers.Accept.Add(...);  // Set whatever headers you need to

var response = await client.SendAsync(request);
like image 185
Darrel Miller Avatar answered Sep 27 '22 20:09

Darrel Miller


Use HttpContent.Headers. Simply create HttpContent instance with required headers and pass it to PostAsync method.

like image 30
SuMMeR Avatar answered Sep 27 '22 20:09

SuMMeR