Nõuded: Mikroteenuste arhitektuurides kasutavad teenuste vahelised kõned sageli HTTP protokolli, tavaliselt kasutades HTTP päringute tegemiseks HttpClient klassi või sedaRefit.HttpClientFactory、WebApiClientCoreKolmanda osapoole teegid, mis põhinevad HttpClient kapseldamisel.
Lisateabe saamiseks HttpClienti kasutamise kohta palun vaata:Hüperlingi sisselogimine on nähtav.
HttpClient lähtekood:Hüperlingi sisselogimine on nähtav.
HttpClient parameetrivabas konstruktoris instantsieeritakse vaikimisi HttpClientHandler objekt ning HttpClientHandler pärib ja rakendab HttpMessageHandler abstraktklassi.Vaikimisi voog: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
Lähtekoodi analüüsi kohaselt on HttpMessageHandlerist päritud objekt konkreetne HttpClienti rakendus, mis saadab HTTP päringuid. HttpClientHttpRequestMessageObjekt antakse sisse ja võetakse vastuHttpResponseMessageObjekt tagastab sisu.
Proovi luua uus TestHttpHandler klass, pärida HttpMessageHandler abstraktsiooniklass ja rakendada SendAsync meetod ning seejärel instanseerida see HttpClient konstruktoris järgmise koodiga:
Nagu allpool näidatud:
Kuigi HttpClienti kutsutakse GET-päringu saatmiseks, ei saada SendAsync meetodi konkreetne rakendus HTTP-päringut ning võrguvoogu ei ole, seegaSa võid võrgukaabli lahti ühendada ja programm töötab normaalselt。
juuresHttpClient objekti kasutamisel ei vabastata aluseks olevat soklit kohe, mis võib põhjustada pistikupesa tühjenemise probleeme. Microsoft on sellest probleemist teadlik ja soovitab kasutada IHttpClientFactory ASP.NET Core projektides HttpClient objektide loomiseks.IHttpClientFactory koondab tehases loodud HttpMessageHandler instantsid basseini, et vähendada ressursikasutust. Kui loote uue HttpClient instantsi, võite kasutada HttpMessageHandler instantsi basseinis uuesti(kui ellujäämisaeg pole veel lõppenud).
IHttpClientFactory .NET jaoks:Hüperlingi sisselogimine on nähtav.
ASP.NET Core'il on pipeline middleware'i kontseptsioon,Tegelikult on HttpClientil ka pipeline middleware'i kontseptsioon Delegating Handleri abil, nagu alloleval joonisel näidatud:
Selle funktsiooni abil saame kinni püüda päringuid ja vastuseid, näiteks suurendada tokeni autentimist enne päringuid, salvestada taotluste ja vastuste jaoks vajalik aeg ning pakkida vastuseandmeid.
Lihtsalt päri DelegatingHandler klass ja üle kirjuta SendAsync meetod.
HTTP-päringute salvestamine võtab aega ja kood on järgmine:
Helistage IHttpClientFactory'le, et luua HttpClient ja saata päring, nagu näidatud järgmisel pildil:
(Lõpp)
|