Persyaratan: Dalam arsitektur layanan mikro, panggilan antar layanan sering menggunakan protokol HTTP, biasanya menggunakan kelas HttpClient untuk membuat permintaan HTTP, atau menggunakannyaRefit.HttpClientFactory、WebApiClientCorePustaka pihak ketiga berdasarkan enkapsulasi HttpClient.
Untuk informasi selengkapnya tentang menggunakan HttpClient, silakan lihat:Login hyperlink terlihat.
Kode sumber HttpClient:Login hyperlink terlihat.
Dalam konstruktor tanpa parameter HttpClient, objek HttpClientHandler dibuat secara default, dan HttpClientHandler mewarisi dan mengimplementasikan kelas abstrak HttpMessageHandler.Alur default: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
Menurut analisis kode sumber, objek yang diwarisi dari HttpMessageHandler adalah implementasi konkret dari HttpClient yang mengirim permintaan HTTP. HttpClient akanPesan Permintaan HttpObjek diteruskan dan kemudian diterimaPesan Tanggapan HttpObjek mengembalikan konten.
Coba buat kelas TestHttpHandler baru, mewarisi kelas abstraksi HttpMessageHandler dan menerapkan metode SendAsync, lalu membuat instance di konstruktor HttpClient, dengan kode berikut:
Seperti yang ditunjukkan di bawah ini:
Meskipun memanggil HttpClient untuk mengirim permintaan GET, implementasi spesifik dari metode SendAsync tidak mengirim permintaan HTTP, dan tidak ada alur jaringan, jadiAnda dapat mencabut kabel jaringan dan program akan bekerja normal。
diSaat menggunakan objek HttpClient, soket yang mendasarinya tidak segera dilepaskan, yang dapat menyebabkan masalah kelelahan soket. Microsoft menyadari masalah ini dan merekomendasikan penggunaan IHttpClientFactory dalam proyek Inti ASP.NET untuk membuat objek HttpClient.IHttpClientFactory mengumpulkan instans HttpMessageHandler yang dibuat pabrik ke dalam kumpulan untuk mengurangi konsumsi sumber daya. Saat Anda membuat instans HttpClient baru, Anda dapat menggunakan kembali instans HttpMessageHandler di kumpulan(jika masa kelangsungan hidup belum berakhir).
IHttpClientFactory untuk .NET:Login hyperlink terlihat.
ASP.NET Core memiliki konsep middleware pipeline,Faktanya, HttpClient juga memiliki konsep middleware pipeline dengan bantuan Delegating Handler, seperti yang ditunjukkan pada gambar di bawah ini:
Dengan menggunakan fitur ini, kita dapat mencegat permintaan dan respons, seperti meningkatkan otentikasi token sebelum permintaan, mencatat waktu yang diperlukan untuk permintaan dan respons, dan membungkus data respons.
Cukup warisi kelas DelegatingHandler dan ganti metode SendAsync.
Merekam permintaan HTTP membutuhkan waktu, dan kodenya adalah sebagai berikut:
Panggil IHttpClientFactory untuk membuat HttpClient dan mengirim permintaan, seperti yang ditunjukkan pada gambar berikut:
(Akhir)
|