Добавление заголовка авторизации в веб-ссылку
Я пытаюсь сделать запросы к веб-службе клиента (я не знаю базовую платформу на клиенте). Я использовал 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 или добавление заголовков.