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

Hem*_*jak 35 c# webrequest windows-authentication

我正在尝试使用.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 );
Run Code Online (Sandbox Code Playgroud)

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

System.Net.WebException: The remote server returned an error: (401) Unauthorized.
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*ayC 40

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

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

request.Credentials = CredentialCache.DefaultCredentials;
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.否则使用NetworkCredential如下:

request.Credentials = new NetworkCredential(user, pwd, domain);
Run Code Online (Sandbox Code Playgroud)


Hem*_*jak 9

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

这对我有用:)


Vit*_*kov 8

要对WebService进行身份验证,请使用DefaultNetworkCredentials而不是DefaultCredentials:

request.Credentials = CredentialCache.DefaultNetworkCredentials;
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我一直试图修复一周的问题.谢谢! (2认同)

Rob*_*man 6

使用VS2015,request.UseDefaultCredentials = true;对我有用!