IIS6、ASP.NET 2.0、无表单身份验证
我正在调用 Response.Redirect("~/foo.aspx"),但出现了我网站的默认文档 ("Default.aspx")。更糟糕的是,它只是间歇性地发生。有时重定向会显示正确的页面。
我检查了会话状态,但在 web.config 中没有看到任何值(也就是说,我假设我使用的是 20 分钟默认值)。
我希望我有更多相关信息可以分享(我会尽力回答任何问题)。
有任何想法吗?为什么不重定向到指定页面?
编辑:我已经深入研究了代码并了解了更多细节。
行。有 foo.aspx 和 foo2.aspx(以及默认文档 Default.aspx)。所有页面都从 BasePage 扩展而来,BasePage 扩展了 Page。
BasePage 有一个名为 ReturnPage 的属性:
protected string ReturnPage {
get {
if (Session["ReturnPage"] == null) {
Session["ReturnPage"] = "";
}
return Session["ReturnPage"].ToString();
}
set { Session["ReturnPage"] = value; }
}
用户点击 foo.aspx 上的一个 LinkButton,点击事件处理程序以两行代码结束:
ReturnPage = ResolveUrl("~/foo.aspx");
Response.Redirect(ResolveUrl("~/foo2.aspx"));
foo2.aspx的Page_Load有问题,其错误处理调用Response.Redirect(ReturnPage)。
当我查看 foo2.aspx 的响应头时,302 位置是 string.Empty (即没有一个)。相同的响应标头与 foo.aspx 的响应具有相同的 ASP.NET 会话 ID。
请记住——这是间歇性的。有时,您可以单击该链接按钮并毫不费力地转到 foo2.aspx,没问题。您可以使用完全相同的数据处理一次单击,它会失败。您将从默认文档(Default.aspx,“错误”发送您的位置)导航回 foo.aspx,再次单击相同的数据(网格/表格中的同一行 - 相同的 LinkButton,本质上),您将毫无问题地被重定向到 foo2.aspx。