Ich möchte eine Standard-Header für jede Methode in der UserHttpClient festlegen, aber ich will nicht, dass jede Methode macht das, ich möchte es in einer allgemeinen Weise tun.Legen Sie eine Standard-Header für jeden HTTP-Client-Aufruf
Das Problem sehe ich bei der aktuellen Implementierung, dass beim Aufruf einer Methode der _client also beim nächsten Aufruf innerhalb einer Http-Anfrage entsorgt wird, der _client nicht initialisiert wird, da dies innerhalb des Konstruktors geschieht.
Der UserHttpClient wird über DI gemäß Http Request registriert.
Ich möchte auch nicht eine private/Basis-Methode erstellen, wo ich den _client übergeben und den Header dort hinzufügen.
Wie würden Sie dieses Problem lösen?
public class UserHttpClient : IUserRemoteRepository
{
private readonly string baseUrl = ConfigurationManager.AppSettings["baseUrl"];
private readonly string header = ConfigurationManager.AppSettings["userHeader"];
private readonly HttpClient _client;
public ServiceProductDataProvider(string toolSystemKeyHeader)
{
_client = new HttpClient();
_client.DefaultRequestHeaders.Add(header, token);
}
public async Task<List<UserDto>> GetUsers(UserRequestDto dto)
{
using (_client)
{
// do stuff
var users = await _client.GetAsync("url here");
}
}
public async Task<UserDto> GetUser(Guid userId)
{
using (_client)
{
// do stuff
var users = await _client.GetAsync("url here");
}
}
}
Genau das habe ich getan, bevor ich deinen Beitrag gesehen habe! Trotzdem danke! aber bei der nutzung kann ich sicher sein, dass der client in einem fehlerfall entsorgt wird, aber ohne zu nutzen wer garantiert mir das? – Pascal
Das DI-Framework wahrscheinlich. Aber das müsstest du aus seiner Dokumentation herausfinden. – user1429080
Ich erben jetzt von HttpClient. Das scheint mir am besten zu sein für die DI-Verkabelung per HTTP-Anfrage, die den UserHttp-Anruf ausführt. – Pascal