Добавление заголовков при использовании httpClient.С getasync

Im реализует api, сделанный другими коллегами с пасекой.ввод-вывод в проекте приложения Магазина 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 ) с заголовком im говоря о enter image description here

Как добавить этот заголовок авторизации в запрос?

5 ответов


при использовании GetAsync с HttpClient вы можете добавить заголовки авторизации следующим образом:

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token");

это добавляет заголовок авторизации на время жизни HttpClient, поэтому полезно, если вы нажимаете один сайт, где заголовок авторизации не изменяется.

вот подробный SO ответ


более поздний ответ, но потому, что никто не дал этого решения...

Если вы не хотите устанавливать заголовок экземпляра 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);
    }

принятый ответ работает, но может усложниться, когда я хочу попробовать добавить заголовки Accept. Это то, чем я закончила. Мне кажется, это проще, поэтому я думаю, что буду придерживаться этого в будущем:

client.DefaultRequestHeaders.Add("Accept", "application/*+xml;version=5.1");
client.DefaultRequestHeaders.Add("Authorization", "Basic " + authstring);

можно добавить, что заголовки нужно HttpClient.

вот хороший учебник об этом.

Это не просто ссылка на POST-запросы, вы также можете использовать его для GET-запросов.


следуя ответу greenhoorn, вы можете использовать "расширения" следующим образом:

  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")