2017-11-02 13 views
0

1つのURLを認証するために異なるsecretKeysがあります。私は、各認証ごとに複数のhttpClientを作成したくありません。 httpClientの1つのオブジェクトに複数の秘密鍵を送信できる方法はありますか?または、私はマルチスレッドですべての秘密鍵と平行してURLを認証できますか?複数のトークンを使用するHttpclientの認証

string baseAdd = "some url"; 
    string[] secretKeys = new string[] { "key1", "key2", "key3"}; 
    HttpClient client = new HttpClient { BaseAddress = new Uri(baseAdd) }; 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new 
    MediaTypeWithQualityHeaderValue("application/json")); 
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", secretKey[0]); 
    var content = new FormUrlEncodedContent(new[]{new KeyValuePair<string, string>("login", "login") 
       }); 
    response = await client.PostAsync(url, content).ConfigureAwait(false); 
+0

「some url」は複数のキーを受け入れますか?私はトークンとURLのペアリングがあると思うので、これは少し奇妙に聞こえる。だからあなたは、URLとトークンを取り、それらを設定する関数を書く必要がありますか? – zaitsman

+0

はいこれは、複数の秘密鍵で認証できるボットフレームワークのdirectlineのURLです。 – Vikram

+0

それでなぜあなたは複数を必要としますか?ちょうど1つを残す?どのアプリケーションを使うべきか、アプリケーションはどちらを使いたいのですか? – zaitsman

答えて

2

DefaultRequestHeadersまさにそれです:HttpClientを介して送信されるすべての要求に対するデフォルトのヘッダー。 「デフォルト」によって暗示されているように、それらは他の場所で設定することができます。 PostAsync(...)のようなメソッドは、リクエストオブジェクトを作成してSendAsync(message)を介して送信するというラッパーです。

static HttpClient client = new HttpClient(); 

をし、メッセージを作成し、それにあなたのヘッダーを適用します。

だから、単に静的に、どこかのHttpClientを定義することができます。

HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, "http://www.site.tld/blah"); 
message.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "Moo"); 
message.Content = new StringContent("{\"a\": 5}", System.Text.Encoding.UTF8, "application/json"); 
var result = await client.SendAsync(message); 
関連する問題