POST-Anforderungen schlagen fehl, wenn <sessionState cookieless = "AutoDetect" /> auf @ gesetzt is

Betrachten Sie den folgenden Fall:

Auf einem Webserver wird eine .NET-App mit @ ausgeführ<sessionState cookieless="AutoDetect" />. Ein Client sendet Daten mit einem einfachenHttpWebRequest (keine Kekse)

Dieser scheinbar einfache Fall führt zu schwerwiegenden Fehlern.

Since .NET kann nicht feststellen, ob der anfordernde Agent HttpWebRequest) unterstützt Cookies und antwortet auf die POST-Anfrage mit einer 302 Found-Weiterleitung an denselben Speicherort mit:

ein Cookie namensAspxAutoDetectCookie in der Antwort ein Abfrageparameter mit dem NamenAspxAutoDetectCookie an der weitergeleiteten Stelle

Der anfragende Agent soll dann den neuen Standort anfordern, derHttpWebRequest tut. Wenn .NET @ sieAspxAutoDetectCookie in der Abfragezeichenfolge weiß, dass es sich um eine erneute Anforderung handelt, und kann ermitteln, ob Cookies unterstützt werden, indem ermittelt wird, ob ein Cookie mit dem NamenAspxAutoDetectCookie befindet sich in den Anforderungsköpfen.

Das Problem ist, dass die meisten anfragenden Agenten (Webbrowser,HttpWebRequest) Behandle einen gefundenen 302 wie einen 303 See Other und fordere erneut ein GET an, unabhängig von der ursprünglichen HTTP-Methode! In der ersten POST-Anforderung gesendete Daten werden nicht weitergeleitet.

Die richtige Antwort sollte eine temporäre 307-Umleitung sein, die die Anforderungsmethode nicht ändert. (Eine POST-Anforderung an Position X leitet zu einem @ weitePOS Anfrage an Standort Y.)

Gibt es eine Möglichkeit, dieses Verhalten in .NET zu ändern, damit POST-Anforderungen nicht zerstört werden?

Informationen zur 3xx-Umleitung

Antworten auf die Frage(8)

Ihre Antwort auf die Frage