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, REST-Aufrufe an meine 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 MyApiClient, damit es 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 es sich bei der App um eine mobile – .NET MAUI – App handelt oder nicht.
Wenn es sich bei der App um eine Blazor-App handelt, d HttpClient.
Und im Fall von .NET MAUI-Apps ist isMobile auf true gesetzt, IHttpClientFactory wäre null und ich würde den lokal deklarierten HttpClient verwenden.

Code: Select all

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
}
}
}
}
Wie gesagt, ich bin mit diesem Ansatz nicht ganz zufrieden, aber das ist der beste, den ich bisher hatte. Ein nicht ganz so sauberer Aspekt dieses Ansatzes ist, dass mein Client das NuGet-Paket Microsoft.Extensions.Http benötigt, um IHttpClientFactory verwenden zu können, und im Fall von .NET MAUI-Apps ist das ein unnötiges Paket, das MyApiClient nur aufbläht.
Ich würde mich über Ihre Vorschläge freuen. Danke!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post