When should we use headers in the HttpRequestMessage object over headers in the HttpClient?
We have need to add Authorization (always changing) and few custom headers (always changing).
Questions
Which is the preferred method?
Should I be adding common headers (same across all the requests) to the
HttpClientand request based headers to theHttpRequestMessageobject?//HttpRequestMessage Code HttpRequestMessage reqmsg =new HttpRequestMessage(); reqmsg.Headers.Authorization =new AuthenticationHeaderValue("some scheme"); reqmsg.Headers.Add("name","value"); //HttpClient Code HttpClient client =new HttpClient(); client.DefaultRequestHeaders.Authorization =new AuthenticationHeaderValue("some scheme"); client.DefaultRequestHeaders.Add("name", "value");
-
Perhaps a nitpick, but the current thinking seems to be to instantiate HttpClient as a singleton, not as a short-lived object (in which case, don't forget to Dispose/use 'using').Max Barraclough– Max Barraclough2018年07月23日 11:01:25 +00:00Commented Jul 23, 2018 at 11:01
-
@MaxBarraclough It would seem that the general consensus now is not to wrap HttpClient in a using block as it will leak connections instead of just recycling the HttpClient. Please see some of the comments in these SO questions: Question-1 and Question-2Anthony Walsh– Anthony Walsh2019年03月16日 19:14:55 +00:00Commented Mar 16, 2019 at 19:14
-
1@AnthonyWalsh This article agrees with you: seems my first suggestion was good, but not my second one: aspnetmonsters.com/2016/08/2016-08-27-httpclientwrongMax Barraclough– Max Barraclough2019年03月28日 21:45:47 +00:00Commented Mar 28, 2019 at 21:45
1 Answer 1
- Which is the preferred method ? Should i be adding common headers (same across all the requests) to the HttpClient
- and request based headers to the HttpRequestMessage object ??
Your questions are auto-answered themselves.
DefaultRequestHeaders are ones that will be part of any request, which is a plus because you'll be able to avoid repeating yourself adding some headers one over again. In the other hand, HttpRequestMessage.Headers will be only part of that request.
When should you use one over the other? I'm going to use two examples:
I need to send an OAuth bearer token as part of every request so I set the
Authorizationheader in theHttpClient.DefaultRequestHeaders, and if I need to refresh the token, I just need to set it again there.I need to send an entity serialized as JSON or XML depending on some condition. That is, I'll set the
Content-typeheader in a per-request basis.
2 Comments
DefaultRequestHeaders is thread safe...Explore related questions
See similar questions with these tags.