asp.net - 为什么即使 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?
解决方案
我终于偶然发现了我做错了什么。
在 web.config 文件 <system.web> 属性中,我设置了cookieless="AutoDetect"。是的,即使您在页面的 <%@ Page%> 标记中设置EnableSessionState="False",服务器也会对 cookie 进行“自动检测”。所以 POST 在没有会话 cookie 的情况下进入,因此服务器使用 GET 操作和?AspxAutoDetectCookieSupport=1参数将浏览器重定向回服务器。
到目前为止,我已经从 AutoDetect 切换到UseCookies,并且我的页面一直按预期工作。
我觉得为遇到这个问题的下一个可怜的鞋底记录我的解决方案很重要。当我再次这样做时,我可能会在不久的将来自己回到这里。
推荐阅读
- mongodb - Express/MongoDB - 向数据库发送请求时如何在 try/catch 块中使用 res.render
- python - 用 csv 数据集替换虚拟合成数据集的问题
- r - R - 在函数中创建环境并在任何地方访问其变量
- java - Intelij - 并行运行
- python - 将步进电机移动到准确位置
- r - system.run 在 Windows 环境中的 R 中
- visual-studio - 快速故障模式有什么作用?
- loops - 我怎样才能循环这段代码?请帮我
- mongodb - Spring Data MongoDB 使用 filterArray 更新双嵌套数组
- php - 如何在 PHP 中接受“子目录”作为参数