Come fare un Server.Transfer () con un Response.AddHeader ( “refresh”, “secondi”) e non ottenere un errore 404?

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

Domanda

quindi questo è lo scenario:

Ho una classe di base per tutte le pagine d'accesso controllato:

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

E una pagina regularpage.aspx che inherints dalla classe di base:

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

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

Ora diciamo che l'URL originale era http: //localhost/regularpage.aspx e che Session.Timeout = 5. Il problema si presenta quando l'aggiornamento avviene dopo il trasferimento ha luogo. Sto ottenendo un errore di 404 Not Found ei cambiamenti URL per http: // localhost / 305 . Si noti che 5 * 60 + 5 = 305.

Sapete perché sta succedendo questo? ha ottenuto una soluzione?

PD:. Io uso il trasferimento perché ho bisogno di accedere ad alcune proprietà di regularpage.aspx su otherpage.aspx, forse si potrebbe fornire un'altra soluzione anche per questo

È stato utile?

Soluzione

C'è molto poco motivo per chiamare base.Page_Load se tutto quello che stai andando a fare è quindi chiamare Server.Transfer. Che cosa stai cercando di realizzare? Se sei solo accedendo alcune proprietà è necessario astratto questo in una logica di business che non si basa sulla dell'oggetto Page.

Questo è anche ciò che sta causando il problema 404 ... perché questo avvenga, il problema deve essere nel output di rendering della pagina (check out). Sembra che si stanno tagliando fuori quella giusta pagina dopo il tag meta-refresh e quindi di iniziare una nuova pagina e ASP.NET è solo il dumping tutto nello stesso flusso di risposta. In breve, si sta facendo male. :) Potreste essere in grado di risolvere questo problema con un Response.Clear ben piazzato (), ma non è questo il vero problema qui ... e che ci si perdere il tag di aggiornamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top