Учитывая, что .net HttpClient был разработан с повторным использованием и предназначен для long alive и утечки памяти были сообщены в коротких экземплярах. Какие направляющие линии существуют там, где вы хотите совершать спокойные вызовы на заданную конечную точку с использованием разных токенов-носителей (или любого заголовка авторизации) при вызове конечной точки для нескольких пользователей?
private void CallEndpoint(string resourceId, string bearerToken) {
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("bearer", bearerToken);
var response = await httpClient.GetAsync($"resource/{resourceid}");
}
Учитывая, что вышеуказанный код может быть вызван любым количеством потоков в веб-приложении, легко может быть, что заголовок, заданный в первой строке, не является тем же, который используется при вызове ресурса.
Не вызывая конкуренции с помощью блокировок и поддерживая веб-приложение без состояния, рекомендуемый подход к созданию и удалению HttpClients для одной конечной точки (моя текущая практика заключается в создании отдельного клиента на конечную точку)?
Жизненный цикл
Хотя HttpClient косвенно реализует IDisposable интерфейса, рекомендуемое использование HttpClient - это не утилизировать его после каждого запроса. Объект HttpClient предназначен для поскольку ваше приложение должно запрашивать HTTP-запросы. Наличие объекта существует по нескольким запросам, позволяет установить место DefaultRequestHeaders и не позволяет вам мешать как CredentialCache и CookieContainer по каждому запросу, так как это было необходимо с помощью HttpWebRequest.