如何使一个Server.Transfer的()与Response.AddHeader(“刷新”,“秒”),并没有得到一个404错误?
-
20-09-2019 - |
题
所以这是该方案:
我对所有登录控制页面的基类:
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()解决这一问题,但在这里,这不是真正的问题......你会失去你的刷新标记。
不隶属于 StackOverflow