Reikalavimai: Mikropaslaugų architektūrose skambučiai tarp paslaugų dažnai naudoja HTTP protokolą, paprastai naudojant HttpClient klasę HTTP užklausoms pateikti arba jį naudotiRefit.HttpClientFactory、WebApiClientCoreTrečiųjų šalių bibliotekos, pagrįstos "HttpClient" inkapsuliavimu.
Daugiau informacijos apie "HttpClient" naudojimą rasite:Hipersaito prisijungimas matomas.
HttpClient šaltinio kodas:Hipersaito prisijungimas matomas.
Konstruktoriuje be parametrų HttpClientHandler objektas yra sukurtas pagal numatytuosius nustatymus, o HttpClientHandler paveldi ir įgyvendina abstrakčią klasę HttpMessageHandler.Numatytasis srautas: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...
Remiantis šaltinio kodo analize, objektas, paveldėtas iš HttpMessageHandler, yra konkretus HttpClient, siunčiančio HTTP užklausas, įgyvendinimas. HttpClient busHttpRequestMessageObjektas perduodamas ir gaunamasHttpResponseMessageObjektas grąžina turinį.
Pabandykite sukurti naują TestHttpHandler klasę, paveldėdami HttpMessageHandler abstrakcijos klasę ir įgyvendindami SendAsync metodą, o tada sukurkite ją HttpClient konstruktoriuje naudodami šį kodą:
Kaip parodyta žemiau:
Nors skambinant HttpClient siųsti GET užklausą, konkretus SendAsync metodo įgyvendinimas nesiunčia HTTP užklausos, ir nėra tinklo srauto, todėlGalite atjungti tinklo kabelį ir programa veiks normaliai。
prieNaudojant HttpClient objektą, pagrindinis lizdas neatleidžiamas iš karto, o tai gali sukelti lizdo išsekimo problemų. "Microsoft" žino apie šią problemą ir rekomenduoja naudoti "IHttpClientFactory" "ASP.NET Core" projektuose kuriant "HttpClient" objektus."IHttpClientFactory" sutelkia gamykloje sukurtus "HttpMessageHandler" egzempliorius į telkinį, kad sumažintų išteklių suvartojimą. Kurdami naują "HttpClient" egzempliorių, telkinyje galite pakartotinai naudoti "HttpMessageHandler" egzempliorių(jei išgyvenimo laikotarpis dar nepasibaigęs).
"IHttpClientFactory", skirta .NET:Hipersaito prisijungimas matomas.
"ASP.NET Core" turi vamzdyno tarpinės programinės įrangos koncepciją,Tiesą sakant, "HttpClient" taip pat turi dujotiekio tarpinės programinės įrangos koncepciją su "Delegating Handler" pagalba, kaip parodyta toliau pateiktame paveikslėlyje:
Naudodami šią funkciją galime perimti užklausas ir atsakymus, pvz., padidinti atpažinimo ženklo autentifikavimą prieš užklausas, įrašyti užklausoms ir atsakymams reikalingą laiką ir apvynioti atsakymo duomenis.
Tiesiog paveldėkite DelegatingHandler klasę ir nepaisykite SendAsync metodo.
HTTP užklausų įrašymas užtrunka, o kodas yra toks:
Skambinkite IHttpClientFactory, kad sukurtumėte "HttpClient" ir išsiųstumėte užklausą, kaip parodyta šiame paveikslėlyje:
(Pabaiga)
|