Résolution de l'exception ThreadAbort dans les redirections ASP.NET
Le problème :
Lorsque vous utilisez Response.Redirect(...)
pour la redirection de page dans ASP.NET, vous pourriez rencontrer la redoutable erreur « System.Threading.ThreadAbortException ».
Comprendre l'exception :
Cette exception se produit car Response.Redirect
, par défaut, continue d'exécuter le code après la commande de redirection. Le serveur Web met alors fin prématurément à la demande, entraînant l'exception.
La solution : la redirection contrôlée
La meilleure façon d'éviter cela est d'utiliser la surcharge Response.Redirect
qui permet de contrôler la fin de la réponse :
<code class="language-csharp">Response.Redirect(url, false); Context.ApplicationInstance.CompleteRequest();</code>
En définissant le paramètre endResponse
sur false
, vous empêchez la résiliation immédiate de la demande. Context.ApplicationInstance.CompleteRequest()
signale ensuite explicitement à IIS de passer directement à la phase EndRequest
, optimisant ainsi les performances en évitant l'exécution de code inutile après la redirection.
Pourquoi c'est mieux :
Bien que la simple utilisation de Response.Redirect(url, true)
puisse sembler une solution, cela peut entraîner des problèmes de performances, car le code restant sur la page s'exécute toujours (bien que brièvement) avant que la redirection ne prenne effet. La méthode ci-dessus offre une redirection plus propre et plus efficace.
Lectures complémentaires :
Pour une analyse plus approfondie de la gestion des cas extrêmes, tels que les redirections au sein des Application_Error
gestionnaires, reportez-vous à des ressources telles que le blog de Thomas Marquardt (le lien serait inséré ici s'il est disponible).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!