ThreadAbortException se produit si vous utilisez Response.End, Response.Redirect ou Server.Transfer

Cet article vous aide à résoudre l’erreur ThreadAbortException qui se produit si vous utilisez Response.End, Response.Redirectou Server.Transfer.

Version du produit d’origine : ASP.NET sur .NET Framework 4.6.2 ou version ultérieure, ASP.NET sur .NET Framework 3.5 Service Pack 1
Numéro de base de connaissances d’origine : 312629

Symptômes

Si vous utilisez le Response.End, Response.Redirectou Server.Transfer la méthode, une ThreadAbortException exception se produit. Vous pouvez utiliser une try-catch instruction pour intercepter cette exception.

Cause

La Response.End méthode met fin à l’exécution de la page et déplace l’exécution vers l’événement Application_EndRequest dans le pipeline d’événements de l’application. La ligne de code suivante Response.End n’est pas exécutée.

Ce problème se produit dans les méthodes et Server.Transfer dans la Response.Redirect mesure où les deux méthodes appellent Response.End en interne.

Résolution

Pour contourner ce problème, utilisez l’une des méthodes suivantes :

  • Pour Response.End , appelez la HttpContext.Current.ApplicationInstance.CompleteRequest méthode au lieu de Response.End contourner l’exécution du code à l’événement Application_EndRequest .

  • Pour Response.Redirect, utilisez une surcharge, Response.Redirect(String URL, bool endResponse) qui passe false pour le paramètre endResponse pour supprimer l’appel interne à Response.End. Par exemple :

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

    Si vous utilisez cette solution de contournement, le code suivant Response.Redirect est exécuté.

  • Pour Server.Transfer, utilisez la méthode à la Server.Execute place.

Bien que ASP.NET gère cette exception, vous pouvez utiliser l’instruction try-catch pour intercepter cette exception. Par exemple :

try
{
    Response.Redirect("nextpage.aspx");
}
catch (Exception ex)
{
    Response.Write (ex.Message);
}

Ajoutez un point d’arrêt sur la Response.Write ligne et notez que ce point d’arrêt est atteint. Lorsque vous examinez l’exception, notez que l’exception ThreadAbortException se produit.