web-dev-qa-db-ja.com

httpClient.GetAsyncを使用するときにヘッダを追加する

Windowsストアアプリプロジェクトで、Apiary.ioと他の同僚によって作られたAPIを実装しています。

彼らは私が実装しなければならない方法のこの例を示しています

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();

 }
}

これと他のいくつかの方法で私は私が前に取得したトークンとヘッダを持つ必要があります

ヘッダーのimについての郵便配達員(クロムの拡張子)の画像 enter image description here

authorizationヘッダーをリクエストに追加する方法

92
Ric

HttpClientと一緒にGetAsyncを使用するときは、以下のように認証ヘッダを追加できます。

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

これはHttpClientの存続期間中に認証ヘッダーを追加するため、認証ヘッダーが変更されない1つのサイトにアクセスしている場合に役立ちます。

これが詳細なSO 答えです

116
kmcnamee

後で答えましたが、誰もこの解決策を与えなかったので...

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);
}
191
Philippe

受け入れられた答えは機能しますが、Acceptヘッダーを追加しようとすると複雑になる可能性があります。これが私が最終的に得たものです。それは私には簡単に思えるので、私は将来それに固執すると思います:

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

HttpClientに必要なヘッダを追加することができます。

これがいい チュートリアル です。

これはPOSTリクエストを参照するだけでなく、GETリクエストにも使用できます。

9
greenhoorn

Greenhoornの答えに従って、次のように "Extensions"を使うことができます。

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