如何使一个Server.Transfer的()与Response.AddHeader(“刷新”,“秒”),并没有得到一个404错误?

StackOverflow https://stackoverflow.com/questions/2456243

所以这是该方案:

我对所有登录控制页面的基类:

public class SessionControlledPage : Page
{
    protected virtual void Page_Load(Object sender, EventArgs e)
    {
        Response.AddHeader("Refresh", Convert.ToString(Session.Timeout * 60 + 5));
        if (Session.IsNewSession)
        {
            Response.Redirect("~/login.aspx");
        }
    }
}

和从基类inherints一个regularpage.aspx页:

public partial class RegularPage : SessionControlledPage
{
    override protected void Page_Load(Object sender, EventArgs e)
    {
        base.Page_Load(sender, e);

        Server.Transfer("~/otherpage.aspx");
    }
}

现在让我们说原来的网址是 HTTP://localhost/regularpage.aspx Session.Timeout = 5。当刷新情况发生转移后出现的问题。我得到一个错误404 Not Found HTTP网址的变化://本地主机/ 305 。请注意,5 * 60 + 5 = 305

你知道为什么会出现这种情况?得到的溶液

PD:我使用的传输,因为我需要访问otherpage.aspx regularpage.aspx的一些性质,也许你可以为此提供另一种解决方案太

有帮助吗?

解决方案

有很少理由骂base.Page_Load如果所有你要做的就是再调用Server.Transfer的。究竟什么是你想实现什么?如果你只是访问某些属性,你需要抽象到这一些,不依赖Page对象的业务逻辑。

这也是什么原因造成的404问题... ...要做到这一点,问题是在页面的渲染输出(检查出来)。好像你被切断元刷新标记后一个页面右侧,然后开始一个新的页面和ASP.NET只是这一切倾倒到相同的响应流。总之,你就错了。 :)你也许可以用一个精心布置Response.Clear()解决这一问题,但在这里,这不是真正的问题......你会失去你的刷新标记。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top