考虑以下情况:

  • Web服务器正在使用<sessionState cookieless="AutoDetect" />运行.NET应用程序。
  • 客户端正在使用简单的HttpWebRequest(无cookie)向其发布数据。

  • 这种看似简单的情况会导致严重故障。

    由于.NET无法确定请求的代理(HttpWebRequest)是否支持cookie,因此它使用302 Found重定向到同一位置来响应POST请求,方法是:
  • 响应
  • 中的一个名为AspxAutoDetectCookie的cookie
  • 转发位置
  • 中名为AspxAutoDetectCookie的查询参数

    然后,请求代理应请求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/

    10-11 22:50
    查看更多