folgenden Fall vor:POST-Anfragen fehlschlagen, wenn <session cookieless = "AutoDetect" /> gesetzt
- Ein Webserver eine .NET-Anwendung mit
<sessionState cookieless="AutoDetect" />
läuft. - Ein Client sendet Daten an ihn mit einem einfachen
HttpWebRequest
(keine Cookies).
Dieser scheinbar einfache Fall verursacht einen großen Fehler.
Da .NET kann nicht feststellen, ob der anfragende Agent (HttpWebRequest
) Cookies unterstützt, antwortet er auf die POST-Anforderung mit einer 302 gefunden Umleitung auf die gleiche Stelle mit:
- ein Cookie
AspxAutoDetectCookie
in dem genannten Antwort - ein Abfrageparameter, soll die neue Stelle beantragen, die
HttpWebRequest
tutAspxAutoDetectCookie
in der weitergeleiteten Lage
der anfragende Agent dann gestattet. Wenn .NET AspxAutoDetectCookie
in der Abfragezeichenfolge sieht, weiß es, dass es sich um eine erneute Anforderung handelt, und kann ermitteln, ob Cookies unterstützt werden, indem festgestellt wird, ob sich ein Cookie mit dem Namen AspxAutoDetectCookie
in den Anforderungsheadern befindet.
Das Problem ist, dass die meisten anfragenden Agenten (Webbrowser, HttpWebRequest
) behandeln eine 302 gefunden, als ob es ein 303 Siehe Andere und machen Sie die erneute Anforderung eines GET, unabhängig von der ursprünglichen HTTP-Methode! Alle in der anfänglichen POST-Anfrage gesendeten Daten werden nicht weitergeleitet.
Die richtige Antwort sollte eine 307 Temporary Redirect sein, die die Request-Methode nicht ändert. (A POST-Anforderung an Position X leitet zu einer POST Anfrage Standort Y.)
Gibt es eine Möglichkeit, dieses Verhalten in .NET zu ändern, so POST-Anfragen nicht zerstört werden?
Information on 3xx redirection
Funktioniert hier zumindest nicht. Lässt immer noch die Postdaten fallen. – Karlth
Es funktioniert, wenn wir den Header anhängen: 'Cookie: AspxAutoDetectCookie = 1'. – Artyom