HttpClient один экземпляр с разными заголовками аутентификации
Учитывая, что .net HttpClient был разработан с целью повторного использования и предназначен длядолго жил а такжеутечки памяти не поступало в недолгих случаях. Какие ориентиры существуют, когда вы хотите совершать спокойные вызовы для данной конечной точки, используя разные токены-носители (или любой заголовок авторизации) при вызове конечной точки для нескольких пользователей?
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.