Добавление заголовка авторизации в веб-ссылку

Я пытаюсь сделать запросы к веб-службе клиента (я не знаю базовую платформу на клиенте). Я использовал WSDL клиента в Visual Studio 2010 с помощью " добавить веб-ссылку "и создал свой прокси-класс (называемый"ContactService").

мне нужно добавить заголовок авторизации, как показано ниже на мой запрос.

Header=Authorization & Value=Basic 12345678901234567890

(на "123456..."значение выше - это просто заполнитель)

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);
}

каков правильный способ добавления заголовок авторизации для запроса на обслуживание?

спасибо!

3 ответов


выше ответ был на правильном пути, но он просто должен был быть в другом месте.

Я добавил Это в свой прокси-класс веб-ссылки, созданный .Net:

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

        return req;
    }

прокси-класс веб-ссылки расширяет систему.Сеть.Сервисы.Протоколы.SoapHttpClientProtocol. Этот класс содержит вызов System.Сеть.WebRequest.GetWebRequest (Uri uri). WebRequest позволяет нам устанавливать определенные заголовки в запросе при вызове методов прокси-класса.

Спасибо за вашу помощь!


есть несколько изменений, чтобы сделать.

во-первых, есть удобная постоянный HttpRequestHeader.Authorization.

во-вторых, они ожидают, что заголовок будет закодирован Base64 - это обычно требуется для базовой аутентификации.

WebClient.Headers.Add(HttpRequestHeader.Authorization, 
    "Basic " + Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("12345678901234567890")));

Я пишу это для тех, у кого есть эта проблема сейчас. Как и в предыдущих ответах, упомянутая иерархия наследования поднимается до WebClientProtocol класс, этот класс имеет ICredentials свойство, просто установите это свойство с помощью NetworkCredential экземпляра, как показано ниже:

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

Я думаю, что taht-самый простой способ без изменения ссылки.cs или добавление заголовков.