web-dev-qa-db-fra.com

Quand dois-je utiliser Response.Redirect (url, true)?

Je redirige vers une page d'erreur avec un message d'erreur prettifié dans mon Application_Error, dans Global.asax.

En ce moment, il dit:

Response.Redirect("Error.aspx", true);

Cela devrait-il être:

Response.Redirect("Error.aspx", false); 

Je ne sais pas dans quelles circonstances je devrais utiliser true et laquelle utiliser false? La page MSDN dit de préférer utiliser false pour éviter les ThreadAbortExceptions, alors quand dois-je utiliser true?

35
Jackson Pope

Vous utilisez false lorsque vous ne souhaitez pas abandonner le thread. Cela signifie que false entraînera l'exécution du code. Donc, les lignes de code qui apparaissent après le Response.Redirect sera exécuté. Un true ne fera que tuer le thread donc rien de plus ne s'exécutera, ce qui à son tour lance un ThreadAbortException.

C'est donc vraiment un appel au jugement basé sur l'apparence du reste du code dans cette situation. En général, vous souhaitez passer des appels à Response.Redirect à la fin d'un chemin d'exécution de sorte que rien ne doit être exécuté. Mais ce n'est souvent pas le cas. Il s'agit simplement de savoir comment vous contrôlez le flux logique dans le code.

Par exemple, si la ligne suivante après Response.Redirect est un return et le chemin d'exécution se termine simplement, alors vous allez probablement bien. Mais s'il y a toutes sortes de logique et que son exécution dans ce cas laisserait le système dans un état inconnu, alors vous voudrez peut-être abandonner le thread.

Personnellement, je considère que l'interruption du thread est révélatrice d'un mauvais contrôle logique. C'est similaire à une odeur de code bien connue où des exceptions sont utilisées pour contrôler le flux logique, qui est universellement mal vu. Si vous pouvez contrôler le flux logique sans avoir à abandonner un thread et à lever une exception, cela serait probablement préférable.

46
David

Enter image description here

Response.Redirect (URL, false): le client est redirigé vers une nouvelle page et la page actuelle sur le serveur continuera le traitement.

Response.Redirect (URL, true): le client est redirigé vers une nouvelle page, mais le traitement de la page en cours est abandonné.

Vous pouvez également voir cette vidéo qui montre les différences Response.Redirect (False vs True) Questions d'entrevue ASP.NET avec réponses .

34
Shivprasad Koirala

Vous n'avez jamais besoin d'utiliser true, car il y a une surcharge sans le paramètre booléen.

Response.Redirect("Error.aspx", false);

ou

Response.Redirect("Error.aspx");

Le paramètre booléen a été ajouté afin que vous puissiez définir la redirection sans arrêter l'exécution. Si vous pouvez quitter le code de la page vous-même sans que cela n'entraîne de frais supplémentaires, comme par exemple la liaison de données, c'est préférable.

16
Guffa

Ici, il est préférable d'utiliser true, car vous voulez tous les autres threads à abandonner; il y a eu une erreur et l'application ne peut pas continuer.

7
τεκ

Si vous la définissez sur true, l'application termine la réponse et la renvoie à l'utilisateur, et si vous la définissez sur false, le code après que la redirection continuera à être exécutée et l'utilisateur sera redirigé vers la nouvelle page après la le cycle de vie de chargement de page complète se termine.

4
Atzoya