Добавление заголовков при использовании httpClient.GetAsync
Im реализует api, созданный другими коллегами с Apiary.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();
}
}
в этом и некоторых других методах мне нужен заголовок с токеном, который я получаю до
heres изображение почтальона (chrome extension) с заголовком im, говорящим о
![enter image description here]()
как добавить заголовок авторизации в запрос?
Ответы
Ответ 1
При использовании GetAsync с HttpClient вы можете добавить заголовки авторизации следующим образом:
httpClient.DefaultRequestHeaders.Authorization
= new AuthenticationHeaderValue("Bearer", "Your Oauth token");
Это добавляет заголовок авторизации на весь срок службы HttpClient, поэтому полезно, если вы заходите на один сайт, где заголовок авторизации не изменяется.
Вот подробный ТАК ответ
Ответ 2
Более поздний ответ, но потому что никто не дал это решение...
Если вы не хотите устанавливать заголовок в экземпляре HttpClient
, добавляя его в DefaultRequestHeaders
, вы можете установить заголовки для каждого запроса.
Но вы будете обязаны использовать метод SendAsync()
.
Это правильное решение, если вы хотите повторно использовать HttpClient
- это хорошая практика для
Используйте это так:
using (var requestMessage =
new HttpRequestMessage(HttpMethod.Get, "https://your.site.com"))
{
requestMessage.Headers.Authorization =
new AuthenticationHeaderValue("Bearer", your_token);
httpClient.SendAsync(requestMessage);
}
Ответ 3
Принятый ответ работает, но может усложниться, когда я хочу попробовать добавить заголовки Accept. Это то, чем я закончил. Мне кажется более простым, поэтому я думаю, что буду придерживаться его в будущем:
client.DefaultRequestHeaders.Add("Accept", "application/*+xml;version=5.1");
client.DefaultRequestHeaders.Add("Authorization", "Basic " + authstring);
Ответ 4
Вы можете добавить любые заголовки, которые вам нужны, в HttpClient
.
Вот хороший урок об этом.
Это не просто ссылка на POST-запросы, вы также можете использовать его для GET-запросов.
Ответ 5
Следуя ответу "зелёный рог", вы можете использовать "Расширения" следующим образом:
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")