← вернуться в ленту
NOTE19 октября 2023· .NET· Easy

Не создавайте HttpClient в .net вручную.

Создание http клиента в обычном rest - флоу - это не гибкость, а трата ресурсов ОС и нагрузка на сеть.

По сабжу. В рамках реста: запрос-ответ. Фоновые воркеры или консольные приложения пока не рассматриваем.


Создаем HttpClient через new: нагружаем ОС, создается риск исчерпания сокетов, обновление DNS нас так же выведет на путь ошибки.


Альтернатива?


Вот чтобы совсем простая - это синглетон, но лучше избегать, как минимум потому, что "синглетон" уже настораживает, а если серьезно для коносольных и воркеров - вполне применимо, но тут надо быть осторожным.


Подход раз.

Для обычного рест-флоу - это IHttpClientFactory. Где основные харктеристики можно задать еще на стадии DI (AddHttpClient):

BaseAddress, DefaultRequestHeaders, DefaultRequestHeaders.Accept, а так же в том числе ретрай политику и многое прочее, а в коде просто вызывать через _httpClientFactory.CreateClient, указав наименование клиента.



Подход два.


Делаем Type Client. Создаем класс. Пробрасываем туда HttpClient и региструем его в DI как HttpClient через те же самые AddHttpClient.

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