如何在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(未授权)。

那么,我怎么能得到这个工作? 可能吗?

提前致谢

问候!

我自己也有同样的问题。 看来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

这是一篇很老的post,但我想为那些面临类似问题并浏览答案的人添加我的回复…

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

您显示的代码适用于我对经过身份validation的资源。 我怀疑美味正在做些奇怪的事情。

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

如果所有其他方法都失败,您始终可以使用基本身份validation凭据直接设置Authentication头。 您不需要使用凭据类。

Interesting Posts