Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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 также предлагает концепцию промежуточного программного обеспечения для конвейера с помощью Delegating Handler, как показано на рисунке ниже:



Используя эту функцию, мы можем перехватывать запросы и ответы, например, увеличивать аутентификацию токенов перед запросами, фиксировать время, необходимое для запросов и ответов, а также обворачивать данные ответов.

Просто унаследуйте класс DelegatingHandler и переопределите метод SendAsync.



Запись HTTP-запросов занимает время, и код выглядит следующим образом:

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



(Конец)




Предыдущий:ajax-hook для веб-разработки перехватывает все запросы XMLHttpRequest
Следующий:параметр метода .NET/C# NULL null
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com