我的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
答案 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;