Выполнение следующего кода:
var request = HttpWebRequest.Create("http://username:password@savanttools.com/test-http-status-codes.asp?code=401");
var response = request.GetResponse();
... и проверка запроса с помощью Wireshark показывает, что мой клиент не пытается авторизоваться (URL-адрес - это простая служба, которая всегда возвращает 401).
Этот код отправляет заголовок авторизации после первоначального запроса:
var request = HttpWebRequest.Create("http://username:password@savanttools.com/test-http-status-codes.asp?code=401");
request.Credentials = new NetworkCredential("username", "password");
var response = request.GetResponse();
Использование класса System.Uri
не дает никакого эффекта. Почему имя пользователя и пароль, переданные в URL-адресе, не используются для аутентификации?
(Я знаю это сообщение в блоге о передаче заголовка авторизации без первоначального запроса, но это не проблема в hand)
РЕДАКТИРОВАТЬ Я должен добавить, что это ограничение довольно легко обойти, например, с помощью этого фрагмента кода (добавьте неэкранированный URL-адрес по вкусу). Мне просто любопытно, почему у вас для этого:
var userInfo = request.Address.UserInfo;
if (!string.IsNullOrEmpty(userInfo) && userInfo.Contains(':'))
{
request.Credentials = new NetworkCredential(userInfo.Split(':').First(), userInfo.Split(':').Last());
}