为什么 Asp.Net HTTP POST 即使 EnableSessionState 设置为 False 也会导致 302 重定向到 GET

Why does a Asp.Net HTTP POST cause a 302 Redirect to GET even with EnableSessionState set to False

我有一个简单的 POST 从第 3 方网站点击到我的 ASP.Net 网站上的页面。因为 POST 命中没有发送 ASP.NET_SessionId cookie,所以它没有 Session 变量的上下文。为了防止 ASP.Net 服务器使用 GET 方法强制 302 重定向到同一页面,并且 ?AspxAutoDetectCookieSupport=1 附加到 URL 我设置 EnableSessionState="False" 在@Page 标签中。使用 POST 方法,我可以收集正在 posted 的变量值并更新本地数据库中的记录。

这在前几天完全正常,现在它再次重定向,我无法获取 POST 附带的变量中的值。在服务器上为 GET 请求提供服务之前,我无法控制页面后面的代码。到那时,所需的 POST 变量早已不复存在。

<%@ Page AutoEventWireup="true" CodeFile="InvoiceUSAePay.aspx.cs"
Inherits="InvoiceUSAePay" Language="C#" EnableSessionState="False" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Invoice USAePay</title> 
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR" />
    <meta content="C#" name="CODE_LANGUAGE" />
    <meta content="JavaScript" name="vs_defaultClientScript" />
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema" />
</head>
<body>
    Enable <%= state %>
</body>
</html>

当 EnableSessionState="False" 时,为什么 post 从 POST 重定向到 GET?

我终于偶然发现了我做错了什么。

在 web.config 文件 属性 中,我设置了 cookieless="AutoDetect"。是的,即使您在页面的 <%@ Page%> 标记中设置 EnableSessionState="False",服务器也会“自动检测”cookie。所以 POST 是在没有会话 cookie 的情况下进入的,因此服务器使用 GET 操作和 ?AspxAutoDetectCookieSupport=1 参数将浏览器重定向回服务器。

我已经从 AutoDetect 切换到 UseCookies,到目前为止,我的页面一直按预期工作。

我觉得为下一个遇到这个问题的可怜鞋底记录我的解决方案很重要。当我再次这样做时,我可能会在不久的将来自己回到这里。