Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 3103|Odpowiedź: 0

[Źródło] .NET/C# Kod źródłowy HttpClient – prosta analiza

[Skopiuj link]
Opublikowano 24.06.2023 13:05:41 | | | |
Wymagania: W architekturach mikroserwisów wywołania między usługami często wykorzystują protokół HTTP, zwykle używając klasy HttpClient do wykonywania żądań HTTP lub jego używaniaRefit.HttpClientFactory、WebApiClientCoreBiblioteki firm trzecich oparte na enkapsulacji HttpClient.

Aby uzyskać więcej informacji o korzystaniu z HttpClient, prosimy odpowiedzieć na:Logowanie do linku jest widoczne.

Kod źródłowy HttpClient:Logowanie do linku jest widoczne.

W konstruktorze HttpClient bez parametrów obiekt HttpClientHandler jest domyślnie instancjonowany, a HttpClientHandler dziedziczy i implementuje abstrakcyjną klasę HttpMessageHandler.Domyślny przepływ: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...



Według analizy kodu źródłowego, obiekt odziedziczony po HttpMessageHandler jest konkretną implementacją HttpClienta wysyłającego żądania HTTP. HttpClient będzieHttpRequestMessageObiekt jest przekazywany, a następnie odbieranyHttpResponseMessageObiekt zwraca treść.

Spróbuj utworzyć nową klasę TestHttpHandler, odziedziczyć klasę abstrakcji HttpMessageHandler i zaimplementować metodę SendAsync, a następnie zinstancjonować ją w konstruktorze HttpClient, z następującym kodem:

Jak pokazano poniżej:



Chociaż wywoływanie HttpClient w celu wysłania żądania GET, konkretna implementacja metody SendAsync nie wysyła żądania HTTP i nie ma przepływu sieciowego, więcMożesz odłączyć kabel sieciowy i program będzie działał normalnie

przyPodczas korzystania z obiektu HttpClient bazowe gniazdo nie jest od razu zwalniane, co może powodować problemy z wyczerpaniem gniazd. Microsoft jest świadomy tego problemu i zaleca użycie IHttpClientFactory w projektach ASP.NET Core do tworzenia obiektów HttpClient.IHttpClientFactory łączy fabrycznie tworzone instancje HttpMessageHandler do puli, aby zmniejszyć zużycie zasobów. Gdy tworzysz nową instancję HttpClient, możesz ponownie użyć instancji HttpMessageHandler w puli(jeśli okres przetrwania nie upłynął).

ASP.NET Core (XV) używa HttpClient do wysyłania żądań HTTP
https://www.itsvse.com/thread-10311-1-1.html

IHttpClientFactory dla .NET:Logowanie do linku jest widoczne.

ASP.NET Core posiada koncepcję middleware pipeline,W rzeczywistości HttpClient posiada także koncepcję middleware pipeline z pomocą Delegating Handler, jak pokazano na poniższym rysunku:



Dzięki tej funkcji możemy przechwytywać żądania i odpowiedzi, takie jak zwiększenie uwierzytelniania tokenów przed zgłoszeniami, rejestrowanie czasu potrzebnego na żądania i odpowiedzi oraz opakowanie danych odpowiedzi.

Po prostu odziedzicz klasę DelegatingHandler i nadpisz metodę SendAsync.



Rejestrowanie zapytań HTTP zajmuje trochę czasu, a kod wygląda następująco:

Zadzwoń do IHttpClientFactory, aby utworzyć HttpClient i wysłać żądanie, jak pokazano na poniższym obrazku:



(Koniec)




Poprzedni:Hak ajax-hook do tworzenia stron internetowych przechwytuje wszystkie żądania XMLHttpRequest
Następny:.NET/C# parametr metody NULL null
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com