Vorausgesetzt, dass der .net HttpClient wurde mit der Wiederverwendung im Auge behalten und soll long lived und memory leaks have been reported in kurzlebigen Instanzen sein. Welche Hilfslinien gibt es, wenn Sie einen bestimmten Endpunkt unter Verwendung verschiedener Trägertokens (oder eines beliebigen Berechtigungsheaders) beim Aufrufen des Endpunkts für mehrere Benutzer erneut anrufen möchten?HttpClient Einzelinstanz mit verschiedenen Authentifizierungsheadern
private void CallEndpoint(string resourceId, string bearerToken) {
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("bearer", bearerToken);
var response = await httpClient.GetAsync($"resource/{resourceid}");
}
durch eine beliebige Anzahl von Threads auf einer Web-Anwendung gegeben werden, den oben genannten Code könnte es leicht möglich ist genannt, dass der Header in der ersten Zeile gesetzt nicht die gleiche ist, die verwendet wird, wenn die Ressource aufrufen.
Ohne Konflikte mit Sperren zu verursachen und eine zustandslose Webanwendung zu verwalten, ist der empfohlene Ansatz zum Erstellen und Entsenden von HttpClients für einen einzelnen Endpunkt (Meine derzeitige Praxis besteht darin, einen einzelnen Client pro Endpunkt zu erstellen)?
Lifecycle
Obwohl Httpclient nicht indirekt die Schnittstelle IDisposable implementieren, ist die empfohlene Verwendung von Httpclient ist nicht nach jeder Anforderung zu entsorgen. Das HttpClient-Objekt soll so lange wie leben, solange Ihre Anwendung HTTP-Anforderungen stellen muss. Wenn ein Objekt für mehrere Anfragen vorhanden ist, können Sie DefaultRequestHeaders festlegen und verhindern, dass Sie bei jeder Anfrage die Eigenschaften wie CredentialCache und CookieContainer neu festlegen müssen, ebenso wie mit HttpWebRequest.
Sprechen Sie über eine relativ kleine Anzahl von verschiedenen Auth-Headern oder Chargen, wie für jeden Benutzer einzigartig? –
@ ToddMenier - Es wäre ein eindeutiger Header für jeden Benutzer.Es wäre, dass Benutzer oauth Token. Ich denke scott hannen hat mich auf den richtigen weg gebracht. Sieht so aus, als wären einige Erweiterungsmethoden in Ordnung. – Bronumski
Hallo @Bronumski, kannst du teilen, wie du das gelöst hast? Ich habe das gleiche Problem mit mehreren Threads, die denselben Header aber mit anderem Inhalt hinzufügen. –