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 "Add Web Reference" and generated my proxy class (called "ContactService").
I now need to add an authorization header like the one below to my service request.
Header=Authorization & Value=Basic 12345678901234567890
(the "123456..." value above is just placeholder)
ContactService service = new ContactService();
//not sure if this is the right way - it's not working
WebClient client = new WebClient();
client.Headers.Add("Authorization", "Basic 12345678901234567890");
service.Credentials = client.Credentials;
int contactKey = null;
try
{
contactKey = service.CreateContact("ABC", emailAddress, firstName, lastName, null);
}
What is the proper way of adding the authorization header to the service request?
Thank you!
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 aICredentials
property, simply set this property by aNetworkCredential
instance as below:I think taht is simplest way without changing Reference.cs or adding headers.
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:
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!
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.