Verwenden von HttpClient in CustomApiClientC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Verwenden von HttpClient in CustomApiClient

Post by Anonymous »

Ich arbeite an einem benutzerdefinierten ApiClient, den ich sowohl in meinen .NET MAUI- als auch in meinen Blazor WASM-Apps verwenden werde. Der Hauptzweck des ApiClient besteht darin, Aufrufe meiner API mithilfe von HttpClient zu erleichtern.
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
}
}
}
}
Wie gesagt, ich bin mit diesem Ansatz nicht ganz zufrieden, aber das ist der beste, den ich bisher hatte. Ich würde mich über Ihre Vorschläge freuen. Danke!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post