Wie ein Server.Transfer () mit einem Response.AddHeader ( „Refresh“, „Sekunden“) zu machen und nicht einen 404-Fehler erhalten?

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

Frage

so dies ist das Szenario:

Ich habe eine Basisklasse für alle Login-gesteuerte Seiten:

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

Und eine regularpage.aspx Seite, dass inherints von der Basisklasse:

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

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

Nun sagen wir die ursprüngliche URL war http: //localhost/regularpage.aspx und dass Session.Timeout = 5. Das Problem erscheint, wenn die Refresh passiert, nachdem der Transfer stattfindet. Ich erhalte eine 404 Not Found Fehler und die URL ändert sich für http: // localhost / 305 . Beachten Sie, dass 5 * 60 + 5 = 305.

Sie wissen, warum ist das passiert? bekam eine Lösung?

PD:. Ich benutze Transfer, weil ich einige Eigenschaften von regularpage.aspx auf otherpage.aspx zugreifen müssen, vielleicht haben Sie auch eine andere Lösung für das zur Verfügung stellen könnte

War es hilfreich?

Lösung

Es gibt sehr wenig Grund zu der Anruf base.Page_Load wenn alles, was Sie gehen zu tun ist, dann Server.Transfer aufrufen. Was genau wollen Sie erreichen? Wenn Sie nur einige Eigenschaften zugreifen, benötigen Sie abstrahieren diese in eine Business-Logik, die nicht auf dem Page-Objekt angewiesen ist.

Das ist auch, was das 404 Problem verursacht ... dies geschehen kann, ist das Problem in der gerenderten Ausgabe der Seite sein muss (check it out). Es scheint, wie Sie aus einer Seite direkt nach dem Meta-Refresh-Tag schneiden und dann eine neue Seite beginnen und ASP.NET ist einfach alles in die gleiche Antwort Strom Dumping. Kurz gesagt, bist du es falsch zu machen. :) Sie könnten in der Lage sein, dies zu beheben mit einem gut platzierten Response.Clear (), aber das ist nicht das eigentliche Problem hier ... und Sie würden Ihren Refresh-Tag verlieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top