Adding Http Headers to HttpClient

C#asp.net Web-ApiDotnet Httpclient

C# Problem Overview


I need to add http headers to the HttpClient before I send a request to a web service. How do I do that for an individual request (as opposed to on the HttpClient to all future requests)? I'm not sure if this is even possible.

var client = new HttpClient();
var task =
	client.GetAsync("http://www.someURI.com")
	.ContinueWith((taskwithmsg) =>
	{
		var response = taskwithmsg.Result;

		var jsonTask = response.Content.ReadAsAsync<JsonObject>();
		jsonTask.Wait();
		var jsonObject = jsonTask.Result;
	});
task.Wait();

C# Solutions


Solution 1 - C#

Create a HttpRequestMessage, set the Method to GET, set your headers and then use SendAsync instead of GetAsync.

var client = new HttpClient();
var request = new HttpRequestMessage() {
    RequestUri = new Uri("http://www.someURI.com"),
	Method = HttpMethod.Get,
};
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
var task = client.SendAsync(request)
	.ContinueWith((taskwithmsg) =>
	{
		var response = taskwithmsg.Result;

		var jsonTask = response.Content.ReadAsAsync<JsonObject>();
		jsonTask.Wait();
		var jsonObject = jsonTask.Result;
	});
task.Wait();

Solution 2 - C#

When it can be the same header for all requests or you dispose the client after each request you can use the DefaultRequestHeaders.Add option:

client.DefaultRequestHeaders.Add("apikey","xxxxxxxxx");      

Solution 3 - C#

To set custom headers ON A REQUEST, build a request with the custom header before passing it to httpclient to send to http server. eg:

HttpClient client = HttpClients.custom().build();
HttpUriRequest request = RequestBuilder.get()
  .setUri(someURL)
  .setHeader(HttpHeaders.CONTENT_TYPE, "application/json")
  .build();
client.execute(request);

Default header is SET ON HTTPCLIENT to send on every request to the server.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRyan PfisterView Question on Stackoverflow
Solution 1 - C#Darrel MillerView Answer on Stackoverflow
Solution 2 - C#TaranView Answer on Stackoverflow
Solution 3 - C#ZimbaView Answer on Stackoverflow