2010-01-10 3 views
2

Je naviguerez sur le code source de FormsAuthentication, et se termine dans le remarquèrentPourquoi FormsAuthentication.RedirectFromLoginPage() se termine par context.Response.Redirect (..., false)?

context.Response.Redirect(strUrl, false); 

Le paramètre « false » signifie « ne pas mettre fin à l'exécution de la page en cours ».

Pourquoi un appel à FormsAuthentication.RedirectFromLoginPage() ne doit-il pas aboutir à l'affichage de la page en cours? Quel est le comportement correct après avoir appelé cette méthode?

Répondre

4

La définition de "endResponse" sur true signifie que l'appel Response.Redirect() force également un appel à Response.End().

Response.End() va immédiatement transférer l'exécution du code à l'événement Application_EndResponse et déclencher un ThreadAbortException à la fin de tout. Fondamentalement, il s'agit d'un «arrêt» plus net de la réponse si vous laissez le paramètre comme faux. Si vous pouvez structurer la logique de votre méthode pour qu'elle se termine tout de suite après l'appel de Response.Redirect(), vous pouvez éviter toutes les choses bizarres qui se produisent en forçant un Response.End().

+0

Donc, dans mon contrôleur, après avoir appelé FormsAuthentication.RedirectFromLoginPage, je devrais appeler Response.End? Ou renvoyer EmptyResult()? – ripper234

+0

(Étant donné que je dois retourner quelque chose de l'action) – ripper234

+0

Renvoie un résultat vide [ou un résultat ActionResult nul]. Si vous appelez Response.End() à partir d'une méthode d'action, les filtres de résultats que vous avez enregistrés seront ignorés. Dans un monde parfait, l'action retournerait un RedirectFromLoginResult, et son override ExecuteResult() contiendrait un appel à Response.Redirect(). En fait, le modèle AccountController par défaut d'ASP.NET MVC 2 ne fait que cela. – Levi

Questions connexes