Долгоживущий HttpClient в C#
Создавать HttpClient на каждый
вызов дорого: теряется пул TCP-соединений и кэш
DNS. Новый клиент заново открывает соединения и
заново узнаёт адрес сервера. Один экземпляр на
процесс - обычная схема для консоли и фоновой
службы.
Заголовки по умолчанию, например User-Agent, задают один раз. Два GET подряд через тот же клиент оба завершаются успешно:
using HttpClient client = new();
client.DefaultRequestHeaders.UserAgent.ParseAdd("DemoAgent/1.0");
using HttpResponseMessage r1 = await client.GetAsync("https://example.com/");
using HttpResponseMessage r2 = await client.GetAsync("https://example.com/");
Console.WriteLine(r1.IsSuccessStatusCode);
Console.WriteLine(r2.IsSuccessStatusCode);
Базовый адрес необязателен. Без свойства
BaseAddress запросы идут на полный URI.
После работы клиент закрывают через using
или Dispose. Предел Timeout и заголовки
лучше задать до серии вызовов. Позже их менять
можно, но так проще не перепутать настройки.
Создайте HttpClient, задайте
заголовок "Accept: text/plain"
и выполните один GET; выведите
IsSuccessStatusCode.