HttpClient.GetAsync พร้อมข้อมูลรับรองเครือข่าย


94

ฉันกำลังใช้HttpWebRequestเพื่อรับเว็บไซต์ HttpWebRequestsฉันต้องการที่จะใช้รูปแบบการรอคอยซึ่งไม่ได้รับ ฉันพบชั้นเรียนHttpClientซึ่งดูเหมือนจะเป็นคลาส Http worker ใหม่ ฉันกำลังใช้HttpClient.GetAsync(...)เพื่อค้นหาหน้าเว็บของฉัน แต่ฉันหายไปเลือกที่จะเพิ่มเช่นClientCredentials HttpWebRequest.Credentialsมีวิธีใดในการให้HttpClientข้อมูลการรับรองความถูกต้องหรือไม่?

คำตอบ:


167

คุณสามารถส่งผ่านอินสแตนซ์ของคลาส HttpClientHandler ที่มีหนังสือรับรองไปยังHttpClient Constructor :

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

20
คุณยังสามารถตั้งค่าUseDefaultCredentials = trueสำหรับHttpClientHandler
Aleksei Poliakov

9
สิ่งนี้อาจทำให้เกิดพฤติกรรมที่ไม่เหมาะสมเมื่อจำเป็นต้องมีการพิสูจน์ตัวตนขั้นพื้นฐานstackoverflow.com/q/25761214/57428
sharptooth

2
ฉันพบว่าคุณต้องการตั้งค่า handler.ClientCertificateOptions = ClientCertificateOption อัตโนมัติเพื่อให้มีการส่งเครดิตจริง
Garr Godfrey

5
แนะนำให้ใช้อินสแตนซ์แบบคงที่ของ HttpClient โดยเฉพาะอย่างยิ่งในสถานการณ์เซิร์ฟเวอร์
James Westgate

3
แล้วเราควรทำอย่างไรในสถานการณ์เซิร์ฟเวอร์? เรากำลังดำเนินการแก้ไขปัญหาที่คุณพบเมื่อคุณไม่มีอินสแตนซ์แบบคงที่ แต่เราจำเป็นต้องส่งข้อมูลรับรอง
Scott Chamberlain
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.