.net - 设置 <sessionState cookieless ="AutoDetect"/> 时 POST 请求失败

标签 .net asp.net http-status-code-302 cookieless http-status-code-307

考虑以下情况:

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

这个看似简单的案例导致了重大失败。

由于 .NET 无法确定请求代理 ( HttpWebRequest ) 是否支持 Cookie,因此它会使用 302 Found 重定向到同一位置来响应 POST 请求:

  • 名为 AspxAutoDetectCookie 的 cookie在响应中
  • 名为 AspxAutoDetectCookie 的查询参数在转发的位置

然后,请求代理应该请求新位置,即 HttpWebRequest做。当.NET看到AspxAutoDetectCookie时在查询字符串中,它知道这是一个重新请求,并且可以通过查看是否有名为 AspxAutoDetectCookie 的 cookie 来确定是否支持 cookie。位于请求 header 中。

问题是,大多数请求代理(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 与 307 问题。如果请求中嵌入了 cookie,ASP.NET 将检测是否支持 cookie,如果没有嵌入 cookie,则假定不支持。

关于.net - 设置 <sessionState cookieless ="AutoDetect"/> 时 POST 请求失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3524067/

相关文章:

c# - 在 Rx 中选择多个

c# - 跟踪无效的回发或回调参数

asp.net - 如何使用 httpErrors 添加默认错误页面

asp.net - 在 IIS7 经典模式下,cs 用户名未显示在 IIS 日志中

jquery - jQuery AJAX 抛出的 302 错误代码是什么?

dns - 需要将一个域重定向到另一个域而不影响电子邮件

javascript - IMG 未显示编码为 Base64 字符串的 PNG 图像

c# - 无法让 C# 中的 SslStream 接受 .net Framework 4.6 的 TLS 1.2 协议(protocol)

c# - 如何在 aspx 页面的服务器脚本 block 中使用 [WebMethod]?