Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 3103|Antwoord: 0

[Bron] .NET/C# Eenvoudige analyse van de broncode van de HttpClient

[Link kopiëren]
Geplaatst op 24-06-2023 13:05:41 | | | |
Vereisten: In microservices-architecturen gebruiken oproepen tussen services vaak het HTTP-protocol, meestal met de HttpClient-klasse om HTTP-verzoeken te doen, of deze te gebruikenRefit.HttpClientFactory、WebApiClientCoreBibliotheken van derden gebaseerd op HttpClient-encapsulatie.

Voor meer informatie over het gebruik van HttpClient, verwijs naar:De hyperlink-login is zichtbaar.

HttpClient-broncode:De hyperlink-login is zichtbaar.

In de HttpClient parameterloze constructor wordt het HttpClientHandler-object standaard geïnstantieerd, en de HttpClientHandler erft en implementeert de abstracte klasse HttpMessageHandler.Standaardflow: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...



Volgens broncode-analyse is het object dat van de HttpMessageHandler wordt geërfd een concrete implementatie van de HttpClient die HTTP-verzoeken verzendt. HttpClient zal het doenHttpRequestMessageHet object wordt doorgegeven en vervolgens ontvangenHttpResponseMessageObject geeft inhoud terug.

Probeer een nieuwe TestHttpHandler-klasse aan te maken, de abstractieklasse HttpMessageHandler te erven en de SendAsync-methode te implementeren, en deze vervolgens te instantiëren in de HttpClient-constructor, met de volgende code:

Zoals hieronder getoond:



Hoewel HttpClient wordt aangeroepen om een GET-verzoek te versturen, stuurt de specifieke implementatie van de SendAsync-methode geen HTTP-verzoek en is er geen netwerkflow, dusJe kunt de netwerkkabel loskoppelen en het programma werkt normaal

opBij gebruik van een HttpClient-object wordt de onderliggende socket niet direct vrijgegeven, wat problemen met socketuitputting kan veroorzaken. Microsoft is zich bewust van dit probleem en raadt aan om IHttpClientFactory te gebruiken in ASP.NET Core-projecten om HttpClient-objecten te creëren.IHttpClientFactory poolt fabrieksgemaakte HttpMessageHandler-instanties in een pool om het resourceverbruik te verminderen. Wanneer je een nieuwe HttpClient-instantie aanmaakt, kun je de HttpMessageHandler-instantie opnieuw gebruiken in de pool(als de overlevingstijd nog niet is verstreken).

ASP.NET Core (XV) gebruikt HttpClient om HTTP-verzoeken te verzenden
https://www.itsvse.com/thread-10311-1-1.html

IHttpClientFactory voor .NET:De hyperlink-login is zichtbaar.

ASP.NET Core heeft het concept van pipeline middleware,Sterker nog, HttpClient heeft ook het concept van pipeline middleware met behulp van Delegating Handler, zoals getoond in de onderstaande figuur:



Door deze functie te gebruiken kunnen we verzoeken en antwoorden onderscheppen, zoals het verhogen van tokenauthenticatie vóór verzoeken, het registreren van de tijd die nodig is voor verzoeken en antwoorden, en het wrappen van responsgegevens.

Erf gewoon de DelegatingHandler-klasse en overschrijf de SendAsync-methode.



Het opnemen van HTTP-verzoeken kost tijd, en de code is als volgt:

Bel IHttpClientFactory om een HttpClient aan te maken en een verzoek te versturen, zoals te zien is in de volgende afbeelding:



(Einde)




Vorig:De ajax-hook voor webontwikkeling onderschept alle XMLHttpRequest-verzoeken
Volgend:.NET/C# methodeparameter NULL null
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com