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

 }
}

в этом и некоторых других методах мне нужно иметь заголовок с маркером, который я получаю перед

вот изображение почтальона (расширение chrome ) с заголовком im говоря о

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

5 66

5 ответов:

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

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

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

вот такой ответ

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

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

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

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