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.5.2, ASP.NET sur .NET Framework 3.5 Service Pack 1
Numéro de la base de connaissances d’origine : 312629

Symptômes

Si vous utilisez la Response.Endméthode , Response.Redirectou Server.Transfer , une exception ThreadAbortException 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 sur l’événement Application_EndRequest dans le pipeline d’événements de l’application. La ligne de code qui suit Response.End n’est pas exécutée.

Ce problème se produit dans les Response.Redirect méthodes et Server.Transfer , car 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 pour 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 afin de supprimer l’appel interne à Response.End. Par exemple :

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

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

  • Pour Server.Transfer, utilisez plutôt la Server.Execute méthode .

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.