Angesichts der Tatsache, dass der .net HttpClient unter Berücksichtigung der Wiederverwendung entwickelt wurde und langlebig sein soll und in kurzlebigen Fällen Speicherlecks gemeldet wurden . In welchen Richtlinien möchten Sie einen bestimmten Endpunkt mit verschiedenen Inhaber-Token (oder einem beliebigen Berechtigungsheader) ruhig aufrufen, wenn Sie den Endpunkt für mehrere Benutzer aufrufen?
private void CallEndpoint(string resourceId, string bearerToken) {
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("bearer", bearerToken);
var response = await httpClient.GetAsync($"resource/{resourceid}");
}
Da der obige Code von einer beliebigen Anzahl von Threads in einer Webanwendung aufgerufen werden kann, ist es leicht möglich, dass der in der ersten Zeile festgelegte Header nicht derselbe ist, der beim Aufrufen der Ressource verwendet wird.
Was ist der empfohlene Ansatz zum Erstellen und Entsorgen von HttpClients für einen einzelnen Endpunkt, ohne Konflikte durch Sperren und Verwalten einer zustandslosen Webanwendung zu verursachen (meine derzeitige Praxis besteht darin, einen einzelnen Client pro Endpunkt zu erstellen)?
Lebenszyklus
Obwohl HttpClient die IDisposable-Schnittstelle indirekt implementiert, besteht die empfohlene Verwendung von HttpClient nicht darin, sie nach jeder Anforderung zu entsorgen. Das HttpClient-Objekt soll so lange leben, wie Ihre Anwendung HTTP-Anforderungen stellen muss. Wenn ein Objekt über mehrere Anforderungen hinweg vorhanden ist, können Sie DefaultRequestHeaders festlegen und müssen nicht bei jeder Anforderung Dinge wie CredentialCache und CookieContainer erneut angeben, wie dies bei HttpWebRequest erforderlich war.