Adding Authorization Header to Web Reference

前端 未结 3 932

I\'m attempting to make requests to a client\'s web service (I don\'t know the underlying platform at the client). I\'ve consumed the client\'s WSDL in Visual Studio 2010 using

相关标签:
3条回答
  • 2021-02-07 11:34

    There are a couple of changes to make.

    Firstly, there is a handy constant HttpRequestHeader.Authorization.

    Secondly, are they expecting the header to be Base64 Encoded - this is normally required for basic authentication.

    WebClient.Headers.Add(HttpRequestHeader.Authorization, 
        "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("12345678901234567890")));
    
    0 讨论(0)
  • 2021-02-07 11:51

    I am writing this for whom that has this problem now. As in preceding answers mentioned inheritance hierarchy goes up to WebClientProtocol class, this class has a ICredentials property, simply set this property by a NetworkCredential instance as below:

    YourServis.Credentials = new NetworkCredential("UserName", "Password", "Domain");
    

    I think taht is simplest way without changing Reference.cs or adding headers.

    0 讨论(0)
  • 2021-02-07 11:53

    The above response was on the right track, but it just had to be in a different location.

    I added this to my web reference proxy class that .Net generated:

    protected override WebRequest GetWebRequest(Uri uri)
        {
            HttpWebRequest req = (HttpWebRequest)base.GetWebRequest(uri);            
            req.Headers.Add(HttpRequestHeader.Authorization,
                    "Basic " + "12345678901234567890");
    
            return req;
        }
    

    A Web Reference proxy class extends System.Web.Services.Protocols.SoapHttpClientProtocol. This class contains a call to System.Net.WebRequest.GetWebRequest(Uri uri). A WebRequest allow us to set specific headers on the request when the proxy class' methods are invoked.

    Thanks for your help!

    0 讨论(0)
提交回复
热议问题