我正在实现Apiary的其他同事所做的API。io,在Windows商店应用程序项目。
他们展示了我必须实现的一个方法的例子:
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();
}
}
在这个方法和其他一些方法中,我需要有一个带有我之前得到的令牌的头。
这是一张邮递员(chrome扩展)的图片,我正在谈论的标题:
如何将授权标头添加到请求中?
一个后来的答案,但因为没有人给出这个解决方案…
如果你不想通过将HttpClient实例添加到DefaultRequestHeaders来设置头,你可以为每个请求设置头。
但是您必须使用SendAsync()方法。
如果您想重用HttpClient,这是一个正确的解决方案——这是一个很好的实践
性能和端口耗尽问题
做一些线程安全的事情
每次都不发送相同的头文件
像这样使用它:
using (var requestMessage =
new HttpRequestMessage(HttpMethod.Get, "https://your.site.com"))
{
requestMessage.Headers.Authorization =
new AuthenticationHeaderValue("Bearer", your_token);
await httpClient.SendAsync(requestMessage);
}
根据新手的回答,你可以像这样使用“扩展”:
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;
}
}
和使用:
string _tokenUpdated = "TOKEN";
HttpClient _client;
_client.AddTokenToHeader(_tokenUpdated).GetAsync("/api/values")
一个后来的答案,但因为没有人给出这个解决方案…
如果你不想通过将HttpClient实例添加到DefaultRequestHeaders来设置头,你可以为每个请求设置头。
但是您必须使用SendAsync()方法。
如果您想重用HttpClient,这是一个正确的解决方案——这是一个很好的实践
性能和端口耗尽问题
做一些线程安全的事情
每次都不发送相同的头文件
像这样使用它:
using (var requestMessage =
new HttpRequestMessage(HttpMethod.Get, "https://your.site.com"))
{
requestMessage.Headers.Authorization =
new AuthenticationHeaderValue("Bearer", your_token);
await httpClient.SendAsync(requestMessage);
}