首页 > 解决方案 > 为什么即使 EnableSessionState 设置为 False,Asp.Net HTTP POST 也会导致 302 重定向到 GET

问题描述

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

前几天它的工作原理完全一样,现在它再次重定向,我无法获取 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 重定向到 GET?

标签: asp.nethttp-postsession-state

解决方案


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

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

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

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


推荐阅读