C#WebRequest返回401

时间:2010-09-13 18:04:56

标签: c# proxy credentials

我的Intranet中有一个Web文件,我的计算机有权读写。我可以打开IE或Firefox并通过键入int url地址来查看该文件。我需要编写一个C#桌面应用程序来读取/写入该文件。即使我的计算机具有访问权限,我到目前为止所有尝试都会导致401,未经授权的访问错误。该程序需要在其帐户已被授权的任何计算机上运行,​​因此我无法对任何用户名/密码进行硬编码。我从来没有做过这样的事情,但我能够从几个网站中找到以下内容:

WebRequest objRequest = HttpWebRequest.Create("https://site.com/file");
objRequest.Credentials = CredentialCache.DefaultNetworkCredentials;
objRequest.Proxy = WebRequest.DefaultWebProxy;
objRequest.Proxy.Credentials = CredentialCache.DefaultCredentials;

WebResponse objResponse = (WebResponse)objRequest.GetResponse();

using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
{
    string str = sr.ReadToEnd();
    sr.Close();
    //... Do stuff with str
}

如果重要,我正在使用.NET 2.0

3 个答案:

答案 0 :(得分:3)

刚遇到同样的问题,当我添加时,这一切都开始起作用了:

objRequest.UseDefaultCredentials = true;

答案 1 :(得分:0)

您是否尝试使用Fiddler检查发送到服务器的实际请求? 您还可以检查服务器是否需要客户端证书以允许连接。

由于您正在访问Intranet服务器,您真的需要设置代理服务器部分吗?我的意思是大部分时间,代理配置为无论如何都要忽略本地地址。

答案 2 :(得分:0)

如果需要NTLM凭据,则无效:

objRequest.Credentials = CredentialCache.DefaultNetworkCredentials;

您需要传递以下实际凭据:

NetworkCredential networkCredential = new NetworkCredential(UserName, Password, Domain);
CredentialCache credCache = new CredentialCache();
credCache.Add(new Uri(url), "NTLM", networkCredential);
objRequest.Proxy.Credentials = credCache;