HttpClient Cookies löschen?
Hallo,
Ich suche nach einem Weg wie man von einer HttpClient Instanz aus die durch den Set-Cookie Header des Servers gespeicherten Cookies löschen kann.
Ein Weg der funktioniert ist
CookieContainer cookies = new();
HttpClientHandler handler = new() { CookieContainer = cookies };
HttpClient client = new(handler);
// anfragen
cookies.SetCookies(new("https://example.com"), string.Empty);
Allerdings muss man dafür ja vorher die CookieContainer Instanz deklarieren und mit dieser den Handler und anschließend den Client erstellen. Kennt jemand vielleicht eine Weg wie man die CookieContainer Instanz oder die HttpClientHandler Instanz vom HttpClient abrufen kann?
Ich habe mich glaube ziemlich undeutlich ausgedrückt.
Als Kontext: Für einen Wrapper einer Web API muss ich die Cookies die von der Domain aus per Set-Cookie gesetzt wurden löschen, allerdings muss bei dem einzigen Weg den ich bisher dafür gefunden habe wie bereits im Code sichtbar die HttpClient Instanz mit dem Container erstellt werden. Jedoch soll der Wrapper nicht nur selber diese Instanz erstellen sondern auch eine bereits vorhandene Instanz verwenden können. Deshalb muss ich irgendwie allein von der HttpClient Instanz aus auf den CookieContainer zugreifen.
2 Antworten
Du kannst beim Verschicken von Daten (via SendAsync) die Request Message mit Headers ausstatten oder über das DefaultRequestHeaders-Property Modifikationen vornehmen.
Um sicherzustellen, dass der selbst gesetzte Cookie-Header nicht ignoriert wird, solltest du beim Anlegen des Clients dennoch eine HttpClientHandler-Instanz überreichen, für die das UseCookies-Property auf false gesetzt wurde (lies dazu auch hier).
Wenn der Client bereits existiert, musst du eine neue Instanz erstellen, die dessen Konfiguration übernimmt.
Kennt jemand vielleicht eine Weg wie man die CookieContainer Instanz oder die HttpClientHandler Instanz vom HttpClient abrufen kann?
Das ist nicht vorgesehen. Das Handler-Objekt wird intern in einem privaten Feld (der Basisklasse von HttpClient) gespeichert, ohne dazu eine direkte, öffentliche Schnittstelle zu gewährleisten.
Du kannst wohl das Gültigkeitsdatum des Cookies einfach auf einen Punkt in der Vergangenheit setzen.
Wenn ich nur die HttpClient Instanz habe, habe ich keine Möglichkeit auf auf die CookieContainer Instanz zuzugreifen und kann somit auch nicht in irgendeiner Hinsicht auf die Cookies zugreifen.
Das ist ja gerade der Punkt das ich diese nicht extra verwenden will. Ich will ja eigentlich auch nicht auf diese zugreifen. Ich benötige lediglich eine Möglichkeit die vom Server gesetzten Cookies zu löschen.