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(...);
}
dtb
источник
20
Вы также можете установить UseDefaultCredentials = trueдляHttpClientHandler
Алексей Поляков
9
Это может вызвать поведение неоптимальный , когда Базовая аутентификация требуется stackoverflow.com/q/25761214/57428
Sharptooth
2
Я обнаружил, что вам нужно установить handler.ClientCertificateOptions = ClientCertificateOption.Automatic, чтобы действительно отправлять кредитные средства.
Гарр Годфри
5
Рекомендуется использовать статический экземпляр HttpClient, особенно в серверных сценариях,
Джеймс Вестгейт
3
Итак, что нам делать в серверных сценариях? Мы сталкиваемся с проблемами, которые возникают у вас, когда у вас нет статического экземпляра, но нам нужно передать учетные данные.
Скотт Чемберлен