Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 3103|Відповідь: 0

[Джерело] .NET/C# Простий аналіз вихідного коду HttpClient

[Копіювати посилання]
Опубліковано 24.06.2023 13:05:41 | | | |
Вимоги: В архітектурах мікросервісів виклики між сервісами часто використовують протокол HTTP, зазвичай за допомогою класу HttpClient для створення HTTP-запитів або його використанняRefit.HttpClientFactory、WebApiClientCoreСторонні бібліотеки на основі інкапсуляції HttpClient.

Для отримання додаткової інформації про використання HttpClient, будь ласка, дивіться:Вхід за гіперпосиланням видно.

Вихідний код HttpClient:Вхід за гіперпосиланням видно.

У конструкторі без параметрів HttpClient за замовчуванням створюється об'єкт HttpClientHandler, а HttpClientHandler успадковує та реалізує абстрактний клас HttpMessageHandler.Потік за замовчуванням: HttpClient -> HttpClientHandler -> SocketsHttpHandler -> ...



Згідно з аналізом вихідного коду, об'єкт, успадкований від HttpMessageHandler, є конкретною реалізацією HttpClient, що надсилає HTTP-запити. HttpClient будеHttpRequestMessageОб'єкт передається і приймаєтьсяHttpResponseMessageОб'єкт повертає вміст.

Спробуйте створити новий клас TestHttpHandler, успадкувати клас абстракції HttpMessageHandler і реалізувати метод SendAsync, а потім інстанціювати його у конструкторі HttpClient з таким кодом:

Як показано нижче:



Хоча виклик HttpClient для надсилання GET-запиту, конкретна реалізація методу SendAsync не надсилає HTTP-запит, і немає мережевого потоку, томуВи можете від'єднати мережевий кабель, і програма працюватиме нормально

приПри використанні об'єкта HttpClient базовий сокет не звільняється одразу, що може спричинити проблеми з виснаженням гнізда. Microsoft усвідомлює цю проблему і рекомендує використовувати IHttpClientFactory у ASP.NET Core проєктах для створення об'єктів HttpClient.IHttpClientFactory об'єднує заводські екземпляри HttpMessageHandler у пул для зменшення споживання ресурсів. Коли ви створюєте новий екземпляр HttpClient, ви можете повторно використати екземпляр HttpMessageHandler у пулі(якщо період виживання ще не минув).

ASP.NET Core (XV) використовує HttpClient для надсилання HTTP-запитів
https://www.itsvse.com/thread-10311-1-1.html

IHttpClientFactory для .NET:Вхід за гіперпосиланням видно.

ASP.NET Core має концепцію конвеєрного проміжного програмного забезпечення,Насправді HttpClient також має концепцію проміжного програмного забезпечення pipeline за допомогою Delegating Handler, як показано на рисунку нижче:



Використовуючи цю функцію, ми можемо перехоплювати запити та відповіді, такі як збільшення автентифікації токена перед запитами, фіксація часу, необхідного для запитів і відповідей, а також обгортання даних відповідей.

Просто успадкуйте клас DelegatingHandler і перезапишіть метод SendAsync.



Запис HTTP-запитів займає час, і код виглядає так:

Викликайте IHttpClientFactory, щоб створити HttpClient і надіслати запит, як показано на наступному зображенні:



(Кінець)




Попередній:Ajax-hook для веб-розробки перехоплює всі запити XMLHttpRequest
Наступний:параметр методу .NET/C# NULL null
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com