Если вы используете ядро asp.net, правильный способ использования HttpClient объясняется в этой статье Microsoft:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.2#typed-clients
Я обычно использую подход типизированного клиента, описанный в статье.
Это в основном означает, что я делегирую в основной контейнер asp.net инъекцию http-клиента в мой класс (класс контроллера, сервис, фильтр и т. Д.)
Таким образом, вы можете безопасно изменить http-клиент в своем классе, добавив все необходимые заголовки запроса (вы обычно делаете это внутри конструктора вашего класса).
Вам не нужно вызывать dispose на введенном http-клиенте, вы просто используете его.
Основной контейнер asp.net будет управлять временем жизни клиента http для вас и пулом ресурсов, используемым экземплярами клиента http, чтобы ваше приложение не пропускало ресурсы. Все это происходит автоматически.
Не использовать синхронизирующие вызовы. Сделайте ваш метод действия асинхронным и дождитесь асинхронных методов http-клиента. Ядро Asp.net полностью поддерживает асинхронный код и делать запросы на блокировку не имеет смысла, поэтому вы ограничите масштабируемость вашего приложения.