Adding headers when using httpClient.GetAsync
When using GetAsync with the HttpClient you can add the authorization headers like so:
httpClient.DefaultRequestHeaders.Authorization
= new AuthenticationHeaderValue("Bearer", "Your Oauth token");
This does add the authorization header for the lifetime of the HttpClient so is useful if you are hitting one site where the authorization header doesn't change.
Here is an detailed SO answer
how to add header to GetAsync in httpclient
You should use the HttpRequestMessage
pattern to do this. For example:
using (var msg = new HttpRequestMessage(HttpMethod.Get, fromUri))
{
msg.Headers.Add("x-header-test", "the value");
using (var resp = await _client.SendAsync(msg))
{
resp.EnsureSuccessStatusCode();
return await resp.Content.ReadAsStringAsync();
}
}
Adding Http Headers to HttpClient
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();
Custom header to HttpClient request
var request = new HttpRequestMessage {
RequestUri = new Uri("[your request url string]"),
Method = HttpMethod.Post,
Headers = {
{ "X-Version", "1" } // HERE IS HOW TO ADD HEADERS,
{ HttpRequestHeader.Authorization.ToString(), "[your authorization token]" },
{ HttpRequestHeader.ContentType.ToString(), "multipart/mixed" },//use this content type if you want to send more than one content type
},
Content = new MultipartContent { // Just example of request sending multipart request
new ObjectContent<[YOUR JSON OBJECT TYPE]>(
new [YOUR JSON OBJECT TYPE INSTANCE](...){...},
new JsonMediaTypeFormatter(),
"application/json"), // this will add 'Content-Type' header for the first part of request
new ByteArrayContent([BINARY DATA]) {
Headers = { // this will add headers for the second part of request
{ "Content-Type", "application/Executable" },
{ "Content-Disposition", "form-data; filename=\"test.pdf\"" },
},
},
},
};
How to add a custom header to HttpClient()?
Try this:
client.DefaultRequestHeaders.Add("X-Version","1");
add header for a client in getAsync (in a using block )
If you layout the code properly you will see where to scope the variables.
using (var client = new HttpClient()) {
client.DefaultRequestHeaders.Add("myHeader", "value");
using (var response = await client.GetAsync(page)) {
var result = await response.Content.ReadAsStringAsync();
}
}
As mentioned in the comments try not to block (.Result) on async code.
Also HttpClient
should be long living. constantly initializing and disposing them can have adverse effects on performance.
How do you set the Content-Type header for an HttpClient request?
The content type is a header of the content, not of the request, which is why this is failing. AddWithoutValidation
as suggested by Robert Levy may work, but you can also set the content type when creating the request content itself (note that the code snippet adds application/json
in two places-for Accept and Content-Type headers):
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://example.com/");
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "relativeAddress");
request.Content = new StringContent("{\"name\":\"John Doe\",\"age\":33}",
Encoding.UTF8,
"application/json");//CONTENT-TYPE header
client.SendAsync(request)
.ContinueWith(responseTask =>
{
Console.WriteLine("Response: {0}", responseTask.Result);
});
Related Topics
Double Precision Problems on .Net
How to Detect a Process Start & End Using C# in Windows
It Is Possible to Copy All the Properties of a Certain Control? (C# Window Forms)
Why Cannot Ienumerable<Struct> Be Cast as Ienumerable<Object>
Why Datetime.Addhours Doesn't Seem to Work
Practical Uses for the "Internal" Keyword in C#
Wrapping Stopwatch Timing with a Delegate or Lambda
Is Bcrypt a Good Hashing Algorithm to Use in C#? How to Find It
How Does Startcoroutine/Yield Return Pattern Really Work in Unity
How Much Faster Is C++ Than C#
Why Is Typedreference Behind the Scenes? It's So Fast and Safe... Almost Magical!
How to Select Xml Nodes with Xml Namespaces from an Xmldocument
Why Cannot Ienumerable<Struct> Be Cast as Ienumerable<Object>
Add Shape Information to a Listview When Its Created
How to Change Time in Datetime