Использование HttpClient в CustomApiClientC#

Место общения программистов C#
Ответить
Anonymous
 Использование HttpClient в CustomApiClient

Сообщение Anonymous »

Я работаю над собственным ApiClient, который буду использовать как в своих приложениях .NET MAUI, так и в Blazor WASM. Основная цель ApiClient — облегчить вызовы моего API с помощью HttpClient.
Проблема здесь заключается в том, что Blazor и .NET MAUI обрабатывают HttpClient по-разному. В Blazor мы можем использовать IHttpClientFactory, но в .NET MAUI рекомендуемый подход — создать HttpClient внутри класса обслуживания. См. документ Microsoft: https://learn.microsoft.com/en-us/dotne ... ent-object
Тогда мой вопрос: как спроектировать мой ApiClient так, чтобы его можно было использовать как в приложениях .NET MAUI, так и в приложениях Blazor и получать HttpClient способом, подходящим для платформы.
Я могу придумать один подход, хотя не уверен, что он хороший. Я просто передаю IHttpClientFactory, который я внедряю в свой DI-контейнер, вместе со значением bool, указывающим, является ли приложение мобильным (.NET MAUI) приложением или нет. Если приложение является приложением Blazor, то есть для isMobile установлено значение false, я использую IHttpClientFactory для обработки HttpClient.
А если для isMobile установлено значение true, я использую HttpClient, объявленный локально.

Код: Выделить всё

public class MyApiClient
{
HttpClient _client;
HttpClientFactory _httpClientFactory;
public MyApiClient(IHttpClientFactory httpClientFactory, bool isMobile)
{
if(isMobile && httpClientFactory is null)
_client = new HttpClient();
else
_httpClientFactory = httpClientFactory;
}
public async Task GetAsync(string url)
{
if(isMobile)
{
// Use _client declared at class level
}
else
{
using(var client = _httpClientFactory.CreateClient("MyApiClient");
{
// Use the client managed by IHttpCilentFactory
}
}
}
}
Как я уже сказал, меня не совсем устраивает этот подход, но это лучшее, что у меня есть на данный момент. Я был бы признателен за любые ваши предложения. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/798 ... mapiclient
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»