Добавление заголовков при использовании 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")