Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 3103|Odpověď: 0

[Zdroj] .NET/C# Zdrojový kód HttpClient jednoduchá analýza

[Kopírovat odkaz]
Zveřejněno 24.06.2023 13:05:41 | | | |
Požadavky: V architekturách mikroslužeb často volání mezi službami používají protokol HTTP, obvykle s třídou HttpClient pro HTTP požadavky nebo jej použitíRefit.HttpClientFactory、WebApiClientCoreKnihovny třetích stran založené na zapouzdření HttpClient.

Pro více informací o používání HttpClient se podívejte na:Přihlášení k hypertextovému odkazu je viditelné.

Zdrojový kód HttpClient:Přihlášení k hypertextovému odkazu je viditelné.

V bezparametrovém konstruktoru HttpClient je objekt HttpClientHandler ve výchozím nastavení instancován a HttpClientHandler dědí a implementuje abstraktní třídu HttpMessageHandler.Výchozí flow: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...



Podle analýzy zdrojového kódu je objekt zděděný z HttpMessageHandleru konkrétní implementací HttpClientu odesílajícího HTTP požadavky. HttpClient budeHttpRequestMessageObjekt je předán a poté přijatHttpResponseMessageObjekt vrací obsah.

Zkuste vytvořit novou třídu TestHttpHandler, zdědit abstrakci HttpMessageHandler a implementovat metodu SendAsync, a poté ji instancovat ve konstruktoru HttpClient s následujícím kódem:

Jak je uvedeno níže:



Ačkoliv volám HttpClient pro odeslání GET požadavku, konkrétní implementace metody SendAsync HTTP požadavek neodešle a síťový tok neprobíhá, takžeMůžete odpojit síťový kabel a program bude fungovat normálně

uPři použití objektu HttpClient není základní socket uvolněn ihned, což může způsobovat problémy s vyčerpáním lůžka. Microsoft si je tohoto problému vědom a doporučuje používat IHttpClientFactory v projektech ASP.NET Core pro tvorbu HttpClient objektů.IHttpClientFactory sdružuje továrně vytvořené instance HttpMessageHandlerů do jednoho poolu, aby snížil spotřebu zdrojů. Když vytvoříte novou instanci HttpClient, můžete instanci HttpMessageHandler znovu použít v poolu(pokud doba přežití nevypršela).

ASP.NET Core (XV) používá HttpClient k odesílání HTTP požadavků
https://www.itsvse.com/thread-10311-1-1.html

IHttpClientFactory pro .NET:Přihlášení k hypertextovému odkazu je viditelné.

ASP.NET Core má koncept pipeline middleware,Ve skutečnosti má HttpClient také koncept pipeline middleware s pomocí Delegating Handler, jak je znázorněno na obrázku níže:



Použitím této funkce můžeme zachytávat požadavky a odpovědi, například zvýšit autentizaci tokenu před žádostmi, zaznamenat čas potřebný pro požadavky a odpovědi a obalit data odpovědí.

Stačí zdědit třídu DelegatingHandler a přepsat metodu SendAsync.



Zaznamenávání HTTP požadavků trvá čas a kód je následující:

Zavolejte IHttpClientFactory a vytvořte HttpClient a pošlete požadavek, jak je znázorněno na následujícím obrázku:



(Konec)




Předchozí:Ajax-hook pro webový vývoj zachytává všechny požadavky XMLHttpRequest
Další:.NET/C# parametr metody NULL null
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com