Dato che .net HttpClient è stato progettato con riutilizzo in mente ed è destinato a essere long lived e memory leaks have been reported in istanze di breve durata. Quali linee guida ci sono dove si desidera effettuare chiamate riposanti verso un determinato endpoint utilizzando diversi token al portatore (o qualsiasi intestazione di autorizzazione) quando si chiama l'endpoint per più utenti?HttpClient singola istanza con diverse intestazioni di autenticazione
private void CallEndpoint(string resourceId, string bearerToken) {
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("bearer", bearerToken);
var response = await httpClient.GetAsync($"resource/{resourceid}");
}
Dato il codice di cui sopra potrebbe essere chiamato da qualsiasi numero di filettatura di un'applicazione web è facilmente possibile che l'intestazione impostato nella prima riga non è lo stesso che viene utilizzato quando si chiama la risorsa.
Senza causare conflitti utilizzando i blocchi e mantenendo un'applicazione Web stateless qual è l'approccio consigliato per la creazione e l'eliminazione di HttpClients per un singolo endpoint (la mia pratica corrente è creare un singolo client per endpoint)?
Lifecycle
Anche se HttpClient fa indirettamente implementare l'interfaccia IDisposable , l'utilizzo raccomandato di HttpClient non è quello di disporre di esso dopo ogni richiesta. L'oggetto HttpClient è destinato a essere utilizzato come finché l'applicazione deve effettuare richieste HTTP. L'esistenza di un oggetto su più richieste abilita un posto per l'impostazione di DefaultRequestHeaders e impedisce di dover rispettare le cose come CredentialCache e CookieContainer su ogni richiesta, come era necessario con HttpWebRequest.
Stai parlando di un numero relativamente piccolo di diverse intestazioni o lotti di autenticazione, ad esempio univoci per ogni utente? –
@ToddMenier: sarebbe un'intestazione univoca per ciascun utente.Sarebbe quel token utente oauth. Penso che lo scott hannen mi abbia messo sulla strada giusta. Sembra che alcuni metodi di estensione saranno in ordine. – Bronumski
Ciao @Bronumski, puoi condividere il modo in cui hai risolto questo? Sto avendo lo stesso problema con più thread aggiungendo la stessa intestazione ma con contenuti diversi. –