考虑以下情况:
<sessionState cookieless="AutoDetect" />
运行.NET应用程序。 HttpWebRequest
(无cookie)向其发布数据。 这种看似简单的情况会导致严重故障。
由于.NET无法确定请求的代理(
HttpWebRequest
)是否支持cookie,因此它使用302 Found重定向到同一位置来响应POST请求,方法是:AspxAutoDetectCookie
的cookieAspxAutoDetectCookie
的查询参数然后,请求代理应请求
HttpWebRequest
所做的新位置。当.NET在查询字符串中看到AspxAutoDetectCookie
时,它知道这是重新请求,并且可以通过查看请求 header 中是否存在名为AspxAutoDetectCookie
的cookie来确定是否支持cookie。问题在于,大多数请求代理(Web浏览器,
HttpWebRequest
)都将302 Found视为303 See Other,并将重新请求设为GET,而不管原始的HTTP方法是什么!初始POST请求中发送的任何数据都不会转发。正确的响应应该是“307临时重定向”,它不会更改请求方法。 (对位置X的POST请求重定向到对位置Y的 POST 请求。)
有什么方法可以更改.NET中的此行为,以便POST请求不会被破坏?
Information on 3xx redirection
最佳答案
我可以看到的唯一解决方案是将AspxAutoDetectCookie=1
附加到所有POST请求中。
这样,ASP.NET将永远不会重定向请求,我们可以完全避开302 vs 307问题。如果在请求中嵌入了cookie,则ASP.NET将检测到支持cookie,并且如果未嵌入任何cookie,则将假定它们不被嵌入。
关于.net - 设置<sessionStateless cookie =“AutoDetect”/>时,POST请求失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3524067/