代码之家  ›  专栏  ›  技术社区  ›  Hemanshu Bhojak

向需要windows身份验证的网页发出web请求

  •  34
  • Hemanshu Bhojak  · 技术社区  · 14 年前

    我正在尝试使用.net中的WebRequest类向网页发出请求。我尝试读取的url需要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.
    

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

    4 回复  |  直到 14 年前
        1
  •  45
  •   N. Taylor Mullen    11 年前

    你应该使用 Credentials

    如果要将当前windows用户的凭据传递给服务,则

    request.Credentials = CredentialCache.DefaultCredentials;
    

    应该会成功的。否则使用 NetworkCredential

    request.Credentials = new NetworkCredential(user, pwd, domain);
    
        2
  •  10
  •   Vitaliy Ulantikov Peter Miehle    13 年前

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

    request.Credentials = CredentialCache.DefaultNetworkCredentials;
    
        3
  •  9
  •   Hemanshu Bhojak    14 年前

    我正在尝试通过windows凭据访问链接a。然后链接A会自动将我重定向到链接B,但不会传递我提供的windows凭据。因此出现了错误。是的请求.AutoRedirect=false,并在每次获取标头中的位置时循环,即每次传递windows凭据时手动执行重定向。

    这对我有用:)

        4
  •  6
  •   Rob Bowman    8 年前

    request.UseDefaultCredentials = true; 对我有用!