向需要Windows身份验证的网页发出Web请求

时间:2010-08-25 05:06:00

标签: c# windows-authentication webrequest

我正在尝试使用.net中的WebRequest类向网页发出请求。我尝试阅读的网址需要Windows身份验证,因此我会收到未经授权的异常。如何将Windows凭据传递给此请求以便进行身份验证。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create( "http://myapp/home.aspx" );

request.Method = "GET";
request.UseDefaultCredentials = false;
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential( "username", "password", "domain" );

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Raises Unauthorized Exception

this.Response.Write( response.StatusCode );

上面的代码返回以下错误。

System.Net.WebException: The remote server returned an error: (401) Unauthorized.

我在检查异常详细信息时注意到一件事是我尝试访问的网址是重定向到另一个提示我提供NT登录详细信息的网址。我相信凭据也应该转发到此URL。但显然它没有发生。

4 个答案:

答案 0 :(得分:39)

您应该使用Credentials属性将Windows凭据传递给Web服务。

如果您希望将当前Windows用户的凭据传递给该服务,则

request.Credentials = CredentialCache.DefaultCredentials;

应该做的伎俩。否则请使用NetworkCredential,如下所示:

request.Credentials = new NetworkCredential(user, pwd, domain);

答案 1 :(得分:9)

我正在尝试访问传递Windows凭据的链接A.链接A然后自动重定向到链接B但不传递我提供的Windows凭据。因此错误。我确实request.AutoRedirect = false,并且每次我在标题中获得位置时都会循环播放,即每次通过Windows凭据时我都会手动重定向。

这对我有用:)

答案 2 :(得分:8)

要对Web Service进行身份验证,请使用DefaultNetworkCredentials而不是Default Credentials:

request.Credentials = CredentialCache.DefaultNetworkCredentials;

答案 3 :(得分:6)

使用VS2015,request.UseDefaultCredentials = true;适合我!

相关问题