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 回答
2

这是一篇旧帖子,但想为面临类似问题和浏览答案的人添加我的回复...

我遇到了类似的问题。就我而言,为 NetworkCredentials 设置域属性有效。您可以尝试设置域。

于 2015-10-05T12:08:03.970 回答
0

您显示的代码适用于经过身份验证的资源。我怀疑 Delicious 正在做一些奇怪的事情。

考虑到您使用的是 Windows Phone,使用 Fiddler 进行调试很痛苦,所以我建议您获取一个Runscope帐户。安装此消息处理程序,它将通过 RunScope 调试器重定向您的请求。完成此操作后,我建议您查看 www-authenticate 标头并检查返回的内容。

如果一切都失败了,您始终可以使用基本身份验证凭据直接设置身份验证标头。您不需要使用 Credentials 类。

于 2013-08-31T16:07:53.870 回答