Выполнение следующего кода:
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, не используются для аутентификации?
(Мне известно о этом сообщении в блоге о передаче заголовка авторизации без первоначального вызова, но это не такпроблема под рукой)
РЕДАКТИРОВАТЬ Я должен добавить, что обойти это ограничение довольно легко, например, с помощью этого небольшого кусочка кода (добавить URL, не выходящий по вкусу), яМне просто любопытно, почему вы должны это сделать:
var userInfo = request.Address.UserInfo;
if (!string.IsNullOrEmpty(userInfo) && userInfo.Contains(':'))
{
request.Credentials = new NetworkCredential(userInfo.Split(':').First(), userInfo.Split(':').Last());
}