ThreadAbortException si verifica se si usa Response.End, Response.Redirect o Server.Transfer

Questo articolo consente di risolvere l'errore ThreadAbortException che si verifica se si usa Response.End, Response.Redirecto Server.Transfer.

Versione originale del prodotto: ASP.NET in .NET Framework 4.5.2, ASP.NET in .NET Framework 3.5 Service Pack 1
Numero KB originale: 312629

Sintomi

Se si usa il Response.Endmetodo , Response.Redirecto Server.Transfer , si verifica un'eccezione ThreadAbortException. È possibile usare un'istruzione try-catch per intercettare questa eccezione.

Causa

Il Response.End metodo termina l'esecuzione della pagina e sposta l'esecuzione all'evento Application_EndRequest nella pipeline di eventi dell'applicazione. La riga di codice seguente Response.End non viene eseguita.

Questo problema si verifica nei Response.Redirect metodi e Server.Transfer perché entrambi i metodi chiamano Response.End internamente.

Risoluzione

Per risolvere questo problema, usare uno dei metodi seguenti:

  • Per Response.End chiamare il HttpContext.Current.ApplicationInstance.CompleteRequest metodo anziché Response.End per ignorare l'esecuzione del codice all'evento Application_EndRequest .

  • Per Response.Redirectusare un overload, Response.Redirect(String URL, bool endResponse) che passa false per il parametro endResponse per eliminare la chiamata interna a Response.End. Ad esempio:

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

    Se si usa questa soluzione alternativa, viene eseguito il codice seguente Response.Redirect .

  • Per Server.Transfer, usare invece il Server.Execute metodo .

Anche se ASP.NET gestisce questa eccezione, è possibile usare l'istruzione try-catch per intercettare questa eccezione. Ad esempio:

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

Aggiungere un punto di interruzione sulla Response.Write riga e notare che questo punto di interruzione viene raggiunto. Quando si esamina l'eccezione, si noti che si verifica l'eccezione ThreadAbortException.