Reputation: 767
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 HttpClient
and request
based headers to the HttpRequestMessage
object?
//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");
Upvotes: 23
Views: 21240
Reputation: 64943
- 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 Authorization
header in the HttpClient.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-type
header in a per-request basis.
Upvotes: 26