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

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

Сообщение Anonymous »

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

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

public class MyApiClient
{
HttpClient _client;
IHttpClientFactory _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 IHttpClientFactory
}
}
}
}
Как я уже сказал, меня не совсем устраивает этот подход, но это лучшее, что у меня есть на данный момент. Один не совсем ясный аспект этого подхода заключается в том, что моему клиенту понадобится пакет NuGet Microsoft.Extensions.Http для использования IHttpClientFactory, а в случае приложений .NET MAUI это один ненужный пакет, который только раздует MyApiClient.
Я буду признателен за любые ваши предложения. Спасибо!

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

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

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

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

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

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