web-dev-qa-db-ja.com

C#のHttpClientで資格情報を使用するには?

HttpClientクラスを使用してDelicious APIにアクセスすると、いくつかの問題に直面します。私は次のコードを持っています:

try
{
    const string uriSources = "https://api.del.icio.us/v1/tags/bundles/all?private={myKey}";
    using (var handler = new HttpClientHandler { Credentials = new  
                             NetworkCredential("MyUSER", "MyPASS") })
    {
         using (var client = new HttpClient(handler))
         {
             var result = await client.GetStringAsync(uriSources);
         }
   }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "ERROR...", MessageBoxButton.OK);
}

上記のコードを実行すると、次のメッセージが表示されます。応答ステータスコードは成功を示しません:401(無許可)。

だから、どうすればこの仕事を手に入れることができますか?出来ますか?

前もって感謝します

よろしく!

22
MikePR

私もまったく同じ問題を抱えていました。 HttpClientHttpClientHandlerに設定された資格情報を無視しているようです。

ただし、次のように機能します。

using System.Net.Http.Headers; // For AuthenticationHeaderValue

const string uri = "https://example.com/path?params=1";
using (var client = new HttpClient()) {
    var byteArray = Encoding.ASCII.GetBytes("MyUSER:MyPASS");
    var header = new AuthenticationHeaderValue(
               "Basic", Convert.ToBase64String(byteArray));
    client.DefaultRequestHeaders.Authorization = header;

    var result = await client.GetStringAsync(uri);
}

ハンドラーは不要です。

ソース: http://www.snip2code.com/Snippet/13895/Simple-C---NET-4-5-HTTPClient-Request-Us

30
Adam Szabo

これは古い投稿ですが、同様の問題に直面し、回答を閲覧している人への私の返信を追加すると考えられています...

同様の問題に直面しました。私の場合、NetworkCredentialsのDomainプロパティの設定は機能しました。ドメインを設定してみてください。

1
Nirav Darji

あなたが表示しているコードは、認証されたリソースに対して機能します。 Deliciousは奇妙なことをしていると思う。

あなたがWindows Phoneを使用していることを考えると、Fiddlerでデバッグするのは苦痛なので、 Runscope アカウントを取得することをお勧めします。これをインストールします メッセージハンドラー RunScopeデバッガーを介してリクエストをリダイレクトします。これを行ったら、www-authenticateヘッダーを見て、何が返されるかを調べることをお勧めします。

他のすべてが失敗した場合、常に基本認証資格情報で認証ヘッダーを直接設定できます。 Credentialsクラスを使用する必要はありません。

0
Darrel Miller