HttpClient.GetAsync dengan kredensial jaringan

93

Saat ini saya menggunakan HttpWebRequestuntuk mendapatkan situs web. Saya ingin menggunakan pola await, yang tidak diberikan untuk HttpWebRequests. Saya menemukan kelas HttpClient, yang tampaknya merupakan kelas pekerja Http baru. Saya menggunakan HttpClient.GetAsync(...)untuk menanyakan halaman web saya. Tapi saya kehilangan opsi untuk menambahkan ClientCredentialssuka HttpWebRequest.Credentials. Apakah ada cara untuk memberikan HttpClientinformasi otentikasi?

Jan K.
sumber

Jawaban:

166

Anda dapat meneruskan instance Kelas HttpClientHandler dengan kredensial ke Pembuat HttpClient :

using (var handler = new HttpClientHandler { Credentials = ... })
using (var client = new HttpClient(handler))
{
    var result = await client.GetAsync(...);
}
dtb
sumber
20
Anda juga dapat mengatur UseDefaultCredentials = trueuntukHttpClientHandler
DarkWalker
9
Hal ini dapat menyebabkan perilaku suboptimal saat otentikasi Dasar diperlukan stackoverflow.com/q/25761214/57428
sharptooth
2
saya telah menemukan Anda akan ingin mengatur handler.ClientCertificateOptions = ClientCertificateOption.Automatic agar benar-benar memiliki credititals terkirim.
Garr Godfrey
4
Disarankan untuk menggunakan contoh statis HttpClient, terutama dalam skenario server
James Westgate
3
Jadi apa yang harus kita lakukan dalam skenario server? Kami menjalankan masalah yang Anda hadapi saat Anda tidak memiliki instance statis, tetapi kami perlu meneruskan kredensial.
Scott Chamberlain