HttpClient.GetAsync с сетевыми учетными данными


94

В настоящее время я использую, HttpWebRequestчтобы получить веб-сайт. Я хотел бы использовать шаблон ожидания, для которого не предусмотрено HttpWebRequests. Я нашел класс HttpClient, который кажется новым рабочим классом Http. Я использую HttpClient.GetAsync(...)для запроса своей веб-страницы. Но мне не хватает возможности добавить ClientCredentialsлайк HttpWebRequest.Credentials. Есть ли способ предоставить HttpClientинформацию для аутентификации?

Ответы:


167

Вы можете передать экземпляр класса HttpClientHandler с учетными данными в конструктор HttpClient :

using (var handler = new HttpClientHandler { Credentials = ... })
using (var client = new HttpClient(handler))
{
    var result = await client.GetAsync(...);
}

20
Вы также можете установить UseDefaultCredentials = trueдляHttpClientHandler
Алексей Поляков

9
Это может вызвать поведение неоптимальный , когда Базовая аутентификация требуется stackoverflow.com/q/25761214/57428
Sharptooth

2
Я обнаружил, что вам нужно установить handler.ClientCertificateOptions = ClientCertificateOption.Automatic, чтобы действительно отправлять кредитные средства.
Гарр Годфри

5
Рекомендуется использовать статический экземпляр HttpClient, особенно в серверных сценариях,
Джеймс Вестгейт

3
Итак, что нам делать в серверных сценариях? Мы сталкиваемся с проблемами, которые возникают у вас, когда у вас нет статического экземпляра, но нам нужно передать учетные данные.
Скотт Чемберлен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.