2010-01-27 118 views
30

我曾经在一个窗口服务运行下面的代码:Web客户端生成(401)未经授权错误

WebClient webClient = new WebClient(); 
webClient.Credentials = new NetworkCredential("me", "12345", "evilcorp.com"); 
webClient.DownloadFile(downloadUrl, filePath); 

每一次,我得到下面的异常

{"The remote server returned an error: (401) Unauthorized."} 

用下面的内部异常:

{"The function requested is not supported"} 

我知道肯定的凭据是有效的,事实上,如果我去downloadUrl在我的网页眉毛呃并把我的凭据作为evilcorp.com \我的密码12345,它下载罚款。

虽然有点奇怪,但如果我用12345指定我的凭证为[email protected],它似乎失败。

有没有格式化凭证的方法?

+0

你有没有想过这个问题的解决方案(代码)? – Crash893 2012-02-16 04:29:55

回答

68

webClient.UseDefaultCredentials = true;解决了我的问题。

+0

以下大多数情况下需要这种设置,服务器需要获取用户的身份信息,如配置Windows身份验证的ASP.Net网站。 – lzlstyle 2013-11-30 08:30:18

+4

布赖恩如果你更亲近我发誓我会亲吻你的权利!一直与这个小时战斗,只错过了这个设置!? :-o谢谢! – KDT 2013-12-04 09:51:47

+1

绝对帮助我。谢谢Brian – FastTrack 2015-01-07 15:27:04

0

写入URL时,请将“@”放在url字符串的前面。

例如:

var url = @"http://evilcorp.com"; 
WebClient webClient = new WebClient(); 
webClient.Proxy = null; 
webClient.DownloadFile(new Uri(url), filePath); 

这将解决您的问题。

P.Brian.Mackey给出的答案也是正确的。

+4

对于你给出的URL,@字符不会有任何区别。 – Dughall 2016-05-27 15:42:25

相关问题