【问题标题】:How to make a server.transfer() with a Response.AddHeader("refresh", "seconds") and not get a 404 error?如何使用 Response.AddHeader("refresh", "seconds") 创建 server.transfer() 而不会出现 404 错误?
【发布时间】:2010-03-16 16:36:13
【问题描述】:

所以这是场景:

我有一个用于所有登录控制页面的基类:

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");
        }
    }
}

还有一个继承自基类的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");
    }
}

现在假设原始 URL 是 http://localhost/regularpage.aspxSession.Timeout = 5。传输发生后发生刷新时会出现问题。我收到404 Not Found 错误,http://localhost/305 的 URL 更改。请注意5 * 60 + 5 = 305

你知道为什么会这样吗?有解决办法吗?

PD:我使用transfer是因为我需要访问otherpage.aspx上的regularpage.aspx的一些属性,也许你也可以为此提供另一种解决方案。

【问题讨论】:

    标签: asp.net server.transfer response.addheader


    【解决方案1】:

    如果您要做的只是调用 Server.Transfer,那么调用 base.Page_Load 的理由就很少。你到底想完成什么?如果您只是访问一些属性,则需要将其抽象为一些不依赖于 Page 对象的业务逻辑。

    这也是导致 404 问题的原因...要发生这种情况,问题必须在页面的渲染输出中(检查一下)。似乎您在元刷新标记之后立即切断一页,然后开始一个新页面,而 ASP.NET 只是将其全部转储到同一个响应流中。简而言之,你做错了。 :) 你也许可以用一个合适的 Response.Clear() 来解决这个问题,但这不是这里真正的问题......而且你会丢失你的刷新标签。

    【讨论】:

    • 感谢 Bryan,实际上 server.transfer() 不在 page_load 中是在另一种方法上(这是一个示例),并且在页面上执行搜索后调用该方法并且一个结果是单击后,我使用与链接关联的信息将其传递到其他页面。我之所以调用 base.Page_Load() 是因为我从我的基类中重写了 Page_Load 方法,而且由于页面生命周期的执行顺序,子 Page_Load 中的代码将在父类上的 Page_Load 之前执行,我需要在之前而不是之后执行父 Page_Load 代码。
    • @Bryan 你能告诉我更多关于抽象业务逻辑的信息吗?我该如何使用它?我只需要来自“常规页面”的一些简单信息,基本上是 3 个整数代码。谢谢。
    • 在不知道您要做什么的情况下,不可能告诉您如何执行此操作。但总的来说,任何设计良好的 ASP.NET 应用程序都将尽可能少地在表示层代码中做事,并将任务卸载到业务逻辑层。 265个字符不足以解释这一点!你解决了原来的问题吗?你没有对此作出回应......
    • 答案是正确的,因为我必须在转移之前放置一个 Response.Clear() .. 不记得我放置它的确切位置,但这就是我解决问题的方法。谢谢布莱恩。
    猜你喜欢
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    相关资源
    最近更新 更多