HttpClient eine einzige Instanz mit verschiedenen Authentifizierungs-Header

Gegeben, dass die .Netto-HttpClient wurde mit Wiederverwendung im Auge und soll lange lebte und memory leaks gemeldet wurden in kurzlebigen Instanzen. Was Hilfslinien sind da, wo Sie wollen, um restful-Aufrufe zu einem bestimmten Endpunkt mit verschiedenen bearer-Token (oder irgendein authorization-header) beim Aufruf der Endpunkt für mehrere Benutzer?

private void CallEndpoint(string resourceId, string bearerToken) {
  httpClient.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("bearer", bearerToken);
  var response = await httpClient.GetAsync($"resource/{resourceid}");
}

Angesichts der obige code aufgerufen werden könnte von einer beliebigen Anzahl von threads, die auf eine web-Anwendung ist es leicht möglich, dass die header-Satz in der ersten Zeile ist nicht das gleiche, das beim Aufruf der Ressource.

Ohne dass Konflikte mit sperren und Aufrechterhaltung einer stateless web-Anwendung, was ist die empfohlene Vorgehensweise zum erstellen und Entsorgung HttpClients für einen einzelnen Endpunkt (Meine aktuellen Praxis ist die Schaffung eines einheitlichen client pro Endpunkt)?


Lifecycle

Obwohl HttpClient hat indirekt die IDisposable implementieren
Schnittstelle, ist die empfohlene Verwendung der HttpClient ist nicht, Sie zu entsorgen
nach jeder Anfrage. Das HttpClient-Objekt bestimmt ist, so zu Leben, wie
lange, wie Sie Ihre Anwendung braucht, um HTTP-Anfragen. Ein Objekt haben
bestehen über mehrere Anfragen hinweg ermöglicht, einen Platz für die Einstellung
DefaultRequestHeaders und verhindert, dass Dinge neu einzugeben
wie CredentialCache-und CookieContainer bei jeder Anfrage, als war
notwendig mit HttpWebRequest.

Sprechen Sie über eine relativ kleine Anzahl von verschiedenen auth-Header oder lose, wie Sie einzigartig für jeden Benutzer?
Es wäre eine einzigartige header für jeden Benutzer. Es wäre, dass der Nutzer den oauth-token. Ich denke, dass scott hannen hat mich auf die richtige Spur. Sieht aus wie eine Erweiterung Methoden wird in Ordnung sein.
Hallo @Bronumski , können Sie teilen sich die Art und Weise Sie diese gelöst? Ich habe das gleiche Problem mit mehreren threads hinzufügen der gleiche Kopf, aber mit unterschiedlichen Inhalten.
Ich habe aktualisiert scotts Antwort mit Beispielen, wie ich die GET und POST. Das gleiche Prinzip wird verwendet, auf eine der anderen Methoden, die Sie implementieren möchten. Die extension-Methode enthält eine Aktion, die ermöglicht es Ihnen, zu manipulieren, das HttpRequest, bevor es gesendet wird.
Danke für die Antwort... scheint, wie ich gehe einen ähnlichen Weg, die Nutzung von sendasync und übergeben eine Anfrage als parameter mit dem custom-Header.

InformationsquelleAutor Bronumski | 2016-06-20

Schreibe einen Kommentar