Передача имени пользователя и пароля в .NET HttpWebRequest через URI не работает

Выполнение следующего кода:

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

8
задан friism 12 November 2011 в 21:33
поделиться