IIS6、ASP.NET 2.0、无表单身份验证
我正在调用 Response.Redirect("~/foo.aspx"),但出现了我网站的默认文档("Default.aspx")。更糟糕的是,这种情况只是间歇性地发生。有时重定向会显示正确的页面。
我检查了会话状态,但在 web.config 中没有看到任何值(也就是说,我假设我使用的是 20 分钟默认值)。
我希望有更多相关信息可以分享(我会尽力回答任何问题)。
有任何想法吗?为什么不重定向到指定页面?
EDIT:我更深入地研究了代码并了解了更多细节。
好的。有 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。
请记住——这是间歇性的。有时,您可以单击该 LinkButton 并轻松转到 foo2.aspx,没问题。您可以使用完全相同的数据处理一次点击,但它会失败。您将从默认文档(Default.aspx,“bug”发送给您的位置)导航回 foo.aspx,再次单击相同的数据(网格/表中的同一行 - 相同的 LinkButton,本质上),并且您将毫无问题地重定向到 foo2.aspx。