Comment faire un Server.Transfer () avec un Response.AddHeader ( « rafraîchir », « secondes ») et ne pas obtenir une erreur 404?

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

Question

c'est donc le scénario:

J'ai une classe de base pour toutes les pages contrôlées connexion-:

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

Et une page qui regularpage.aspx inherints de la classe de base:

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

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

Maintenant, supposons que l'URL d'origine était http: //localhost/regularpage.aspx et que Session.Timeout = 5. Le problème apparaît lorsque l'actualisation se produit après le transfert a lieu. Je reçois une erreur de 404 Not Found et les changements d'URL pour http: // localhost / 305 . Notez que 5 * 60 + 5 = 305.

Savez-vous pourquoi est-ce qui se passe? a obtenu une solution?

PD. J'utilise le transfert parce que je dois accéder à certaines propriétés de regularpage.aspx sur otherpage.aspx, vous pourriez peut-être fournir une autre solution pour cela aussi

Était-ce utile?

La solution

Il y a très peu de raisons d'appeler base.Page_Load si tout ce que vous allez faire est d'appeler alors Server.Transfer. Qu'est-ce que vous essayez d'accomplir exactement? Si vous êtes juste accès à certaines propriétés dont vous avez besoin de faire abstraction dans ce une logique d'entreprise qui ne repose pas sur l'objet Page.

Ceci est aussi ce qui est à l'origine du problème 404 ... pour que cela se produise, le problème doit être dans la sortie rendu de la page (vérifier). Il semble que vous coupez une bonne page après la balise meta-refresh et puis commencer une nouvelle page et ASP.NET est le dumping juste tout dans le même flux de réponse. Bref, vous le faites mal. :) Vous pourriez être en mesure de résoudre ce problème avec un Response.Clear () bien placé, mais ce n'est pas le vrai problème ici ... et vous perdriez votre balise de rafraîchissement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top