22

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 (未承認)。

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

前もって感謝します

よろしく!

4

3 に答える 3

35

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

ただし、以下は機能します。

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

于 2014-05-28T14:37:55.457 に答える
0

あなたが示しているコードは、認証されたリソースに対して機能します。私はデリシャスが何か変なことをしているのではないかと疑っています。

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

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

于 2013-08-31T16:07:53.870 に答える