Die Herausforderung hierbei besteht darin, dass Blazor und .NET MAUI HttpClient unterschiedlich behandeln. In Blazor können wir IHttpClientFactory verwenden, aber in .NET MAUI besteht der empfohlene Ansatz darin, den HttpClient innerhalb der Serviceklasse zu erstellen – siehe Microsoft-Dokument: https://learn.microsoft.com/en-us/dotne ... ent-object
Meine Frage ist dann, wie man entwirft meinen ApiClient, damit er sowohl in .NET MAUI- als auch in Blazor-Apps verwendet werden kann und HttpClient auf eine für die Plattform richtige Weise empfängt.
Hier ist ein Ansatz, der mir einfällt, obwohl ich nicht sicher bin, ob er gut ist. Ich übergebe einfach die IHttpClientFactory, die ich in meinen DI-Container einfüge, zusammen mit einem bool-Wert, der angibt, ob die App eine mobile – .NET MAUI – App ist oder nicht. Wenn es sich bei der App um eine Blazor-App handelt, was bedeutet, dass isMobile auf „false“ gesetzt ist, verwende ich die IHttpClientFactory, um den HttpClient zu verarbeiten.
Und wenn isMobile auf „true“ gesetzt ist, verwende ich den lokal deklarierten HttpClient.
Code: Select all
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
}
}
}
}
Mobile version