Compartilhar via


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

Este artigo ajuda a resolver o ThreadAbortException erro que ocorre se você usar Response.End, Response.Redirect, ou Server.Transfer.

Versão original do produto: ASP.NET no .NET Framework 4.6.2 ou posterior ASP.NET no .NET Framework 3.5 Service Pack 1
Número original da base de conhecimento: 312629

Sintomas

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

Causa

O Response.End método encerra a execução da página e muda 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 and Server.Transfer porque ambos os métodos chamam Response.End internamente.

Soluçã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 do Response.End código para o Application_EndRequest evento.

  • Para Response.Redirect, use uma sobrecarga, Response.Redirect(String url, 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.

  • Para Server.Transfer, 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 a ThreadAbortException exceção ocorre.