Я относительно новичок в использовании HttpClient и API, но я провел некоторые поиски, и кажется, что общее мнение, даже из документов Microsoft, состоит в том, что HttpClient должен быть создан один раз. У меня есть несколько мест, где мне нужно вызывать конечную точку API в моем проекте, поэтому я создал служебный класс HttpClient, который можно вызывать.
public static class HttpClientManager
{
private static HttpClient _httpClient;
private static HttpClientHandler _handler;
private static readonly string _apiBaseUrl = ConfigurationManager.AppSettings["ApiUrl"];
static HttpClientManager()
{
if (_handler == null) _handler = new HttpClientHandler
{
UseDefaultCredentials = true,
PreAuthenticate = true,
AllowAutoRedirect = true,
ClientCertificateOptions = ClientCertificateOption.Automatic
};
if (_httpClient == null) _httpClient = new HttpClient(_handler, false);
}
public static HttpClient GetHttpClient()
{
if(_httpClient.BaseAddress == null)
{
_httpClient.BaseAddress = new Uri(_apiBaseUrl);
}
_httpClient.DefaultRequestHeaders.Accept.Clear();
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return _httpClient;
}
}
Общая идея заключается в том, что конструктор stati c инициализирует http-клиента, а затем у меня есть метод getHttpClient c stati, который установит адрес и заголовки и вернет клиенту другие классы. в моем проекте можно сделать вызов, например, HttpClientManager.GetHttpClient (). GetAsyn c (.....) ....
Теоретически это должно гарантировать, что клиент будет инициализирован один раз на сначала вызовите конструктор stati c и используйте его повторно в течение всего жизненного цикла приложения. Это правильный способ сделать что-то подобное или есть лучший дизайн?
Любой совет будет признателен, спасибо!