当指定另一个页面时重定向到 webapp 默认文档?

2023-12-07

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 上的 LinkBut​​ton,单击事件处理程序以两行代码结束:

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。

请记住——这是间歇性的。有时,您可以单击该 LinkBut​​ton 并轻松转到 foo2.aspx,没问题。您可以使用完全相同的数据处理一次点击,但它会失败。您将从默认文档(Default.aspx,“bug”发送给您的位置)导航回 foo.aspx,再次单击相同的数据(网格/表中的同一行 - 相同的 LinkBut​​ton,本质上),并且您将毫无问题地重定向到 foo2.aspx。


在 Response.Redirect() 之前立即在会话中放置值是有风险的。

将 foo.aspx 的 Response.Redirect() 更改为以下内容可能会更可靠地保留会话值:

Response.Redirect("~/foo2.aspx", false);

UPDATE:这个问题最终只能通过将会话状态移至 SQL Server 来解决。查看相关问题:为什么/什么时候会话写入容易受到线程终止的影响?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当指定另一个页面时重定向到 webapp 默认文档? 的相关文章

随机推荐