CSharp Tips:应用程序访问集成Windows认证的站点
问题从事过Web oRequest = (System.Net.HttpWebRequest) WebRequest.Create(uri);
if (oRequest != null)
{
// send request
oRequest.ProtocolVersion = HttpVersion.Version11;
oRequest.Method = @"GET";
oResponse = (System.Net.HttpWebResponse) oRequest.GetResponse(); }
这段代码请求允许匿名访问的站点的时候没有任何问题,但是当站点关闭匿名访问的开关的时候,就会收到上面提到的401的错误。因为我们并没有指定访问该站点的用户ID。 oRequest.Credentials = CredentialCache.DefaultCredentials;
CredentialCache.DefaultCredentials记录了应用程序当前运行上下文中的认证信息,但是你无法从中读取用户名、口令和登录域(都是空字符串),不过确确实实记录了当前登录用户的信息,这也是Windows的保护机制吧。 oCredential = new NetworkCredential(sUser,sPwd,sDomain);
oRequest.Credentials = oCredential.GetCredential(new Uri(uri),String.Empty); oRequest = (System.Net.HttpWebRequest) WebRequest.Create(uri);
if (oRequest != null)
{
// send request
oRequest.ProtocolVersion = HttpVersion.Version11;
oRequest.Method = @"GET";
if (sUser != String.Empty)
{
oCredential = new NetworkCredential(sUser,sPwd,sDomain);
oRequest.Credentials = oCredential.GetCredential(new Uri(uri),String.Empty);
}
else
{
oRequest.Credentials = CredentialCache.DefaultCredentials;
}
oResponse = (System.Net.HttpWebResponse) oRequest.GetResponse(); }
这样只要当前登录用户或者你提供帐号和口令的用户通过任何,你就可以像普通情况下一样访问Web Site上的资源了。当然如果提供了错误的用户名或者口令的话,不要来找我。