可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Im implementing a api made by other collegues with Apiary.io, in a windows store app project.
they show this example of a method i have to implement
var baseAddress = new Uri("https://private-a8014-xxxxxx.apiary-mock.com/");
using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{
using(var response = await httpClient.GetAsync("user/list{?organizationId}"))
{
string responseData = await response.Content.ReadAsStringAsync();
}
}
in this and some other methods i need to have a header with a token that i get before
heres a image of postman( chrome extension ) with the header im talking about
how do i add that Authorization header to the request?
回答1:
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
回答2:
A later answer but because no one gave this solution...
If you don't want to set the header on the HttpClient instance by adding it to the DefaultRequestHeaders
, you could set headers per request.
But you will be obliged to use the SendAsync()
method.
It's the right solution if you want to reuse the httpclient --which is a good practice for performance and port exhaustion problems-- and do something thread safe and without sending every time the same headers...
Use it like that:
using( var requestMessage = new HttpRequestMessage(HttpMethod.Get, "https://your.site.com"))
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", your_token);
httpClient.SendAsync(requestMessage);
}
回答3:
The accepted answer works but can got complicated when I wanted to try adding Accept headers. This is what I ended up with. It seems simpler to me so I think I'll stick with it in the future:
client.DefaultRequestHeaders.Add("Accept", "application/*+xml;version=5.1");
client.DefaultRequestHeaders.Add("Authorization", "Basic " + authstring);
回答4:
You can add whatever headers you need to the HttpClient
.
Here is a nice tutorial about it.
This doesn't just reference to POST-requests, you can also use it for GET-requests.
回答5:
Following the greenhoorn's answer, you can use "Extensions" like this:
public static class HttpClientExtensions
{
public static HttpClient AddTokenToHeader(this HttpClient cl, string token)
{
//int timeoutSec = 90;
//cl.Timeout = new TimeSpan(0, 0, timeoutSec);
string contentType = "application/json";
cl.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType));
cl.DefaultRequestHeaders.Add("Authorization", String.Format("Bearer {0}", token));
var userAgent = "d-fens HttpClient";
cl.DefaultRequestHeaders.Add("User-Agent", userAgent);
return cl;
}
}
And use:
string _tokenUpdated = "TOKEN";
HttpClient _client;
_client.AddTokenToHeader(_tokenUpdated).GetAsync("/api/values")