PRB: Se produce ThreadAbortException si usa Response.End, Response.Redirect o Server.Transfer

Síntomas

Si utiliza el Response.End, Response.Redirect, o
Método Server.Transfer , se produce una excepción ThreadAbortException . Puede utilizar una instrucción try-catch para detectar esta excepción.

Causa

El método Response.End finaliza la ejecución de la página y desplaza la ejecución al evento Application_EndRequest en canalización de eventos de la aplicación. No se ejecuta la línea de código que sigue a Response.End .

Este problema se produce en los métodos Response.Redirect y Server.Transfer porque ambos métodos invocan internamente a Response.End .

Solución

Para evitar este problema, utilice uno de los métodos siguientes:

  • Para Response.End, llame al método HttpContext.Current.ApplicationInstance.CompleteRequest en lugar de Response.End para omitir la ejecución de código al evento Application_EndRequest .
  • Para Response.Redirect, utilice una sobrecarga, Response.Redirect (String url, bool endResponse) que pasa false al parámetro endResponse para suprimir la llamada interna a Response.End. Por ejemplo:
      Response.Redirect ("nextpage.aspx", false);
    Si utiliza esta solución, se ejecuta el código que sigue a Response.Redirect .
  • Server.Transfer, utilice en su lugar el método Server.Execute .

Estado

Este comportamiento es por diseño.
Propiedades

Id. de artículo: 312629 - Última revisión: 22 ene. 2017 - Revisión: 1

Microsoft ASP.NET 4.5, Microsoft ASP.NET 4.0, Microsoft ASP.NET 3.5, Microsoft ASP.NET 2.0, Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

Comentarios