C#WebRequest返回401

C#WebRequest返回401,c#,proxy,credentials,C#,Proxy,Credentials,在我的内部网中有一个web文件,我的计算机有权读取和写入该文件。我可以打开IE或Firefox并通过输入url地址查看文件。我需要编写一个C#桌面应用程序来读取/写入该文件。尽管我的计算机有访问权限,但迄今为止我的所有尝试都会导致401次未经授权的访问错误。该程序需要从任何帐户已被授权的计算机上运行,因此我无法硬编码任何用户名/密码。我从未做过类似的事情,但我能从几个网站上搜到以下内容: WebRequest objRequest = HttpWebRequest.Create("https:/

在我的内部网中有一个web文件,我的计算机有权读取和写入该文件。我可以打开IE或Firefox并通过输入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中工作

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


由于您正在访问intranet服务器,您真的需要设置代理部分吗?我的意思是,大多数情况下,代理都被配置为忽略本地地址。

如果需要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;

遇到了同样的问题,当我添加以下内容时,一切都开始起作用:

objRequest.UseDefaultCredentials = true;

这是您试图将windows(NTLM)凭据传递给它的IIS站点吗?我正在创建一个win表单。我正在访问的站点是一个IIS站点,我正在尝试将windows(NTLM)凭据传递给它。当您的webbrowser不工作时,为什么要将windows(NTLM)凭据传递给该站点?好的。。。。我不确定我是否需要通过NTLM。我只知道浏览器可以访问文件,但我的win表单不能。