O ThreadAbortException ocorrerá se você usar Response.End, Response.Redirect ou Server.Transfer

Este artigo ajuda você a resolve o erro ThreadAbortException que ocorre se você usar Response.End, Response.Redirectou Server.Transfer.

Versão original do produto: ASP.NET no .NET Framework 4.5.2, ASP.NET no .NET Framework Service Pack 1 3.5
Número de KB original: 312629

Sintomas

Se você usar o Response.Endmétodo , Response.Redirectou Server.Transfer , uma exceção ThreadAbortException ocorrerá. Você pode usar uma try-catch instrução para capturar essa exceção.

Motivo

O Response.End método encerra a execução da página e transfere a execução para o evento Application_EndRequest no pipeline de eventos do aplicativo. A linha de código a seguir Response.End não é executada.

Esse problema ocorre nos Response.Redirect métodos e Server.Transfer porque ambos os métodos chamam Response.End internamente.

Resolução

Para contornar esse problema, use um dos seguintes métodos:

  • Para Response.End , chame o HttpContext.Current.ApplicationInstance.CompleteRequest método em vez de ignorar a execução de Response.End código para o Application_EndRequest evento.

  • Para Response.Redirect, use uma sobrecarga, Response.Redirect(Url string, bool endResponse) que passa false para o parâmetro endResponse para suprimir a chamada interna para Response.End. Por exemplo:

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

    Se você usar essa solução alternativa, o código a seguir Response.Redirect será executado.

  • Em Server.Transfervez disso, use o Server.Execute método.

Embora ASP.NET manipule essa exceção, você pode usar a try-catch instrução para capturar essa exceção. Por exemplo:

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

Adicione um ponto de interrupção na Response.Write linha e observe que esse ponto de interrupção foi atingido. Ao examinar a exceção, observe que ocorre a exceção ThreadAbortException.