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

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 312629
Síntomas
Si utiliza el Response.End, Response.Redirecto Server.Transfer método, 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 llaman internamente a Response.End .
Solución
Para evitar este problema, utilice uno de los métodos siguientes:
  • Para Response.end, llame a la HttpContext.Current.ApplicationInstance.CompleteRequest método en lugar de Response.end para omitir la ejecución de código a la Application_EndRequest evento.
  • Para Response.Redirect, utilice una sobrecarga, Response.Redirect (String url, bool endResponse) que pasa False para el endResponse parámetro para suprimir la llamada interna a Response.end. Por ejemplo:
      Response.Redirect ("nextpage.aspx", false);						
    Si utiliza esta solución, el código que sigue Response.Redirect se ejecuta.
  • Para Server.Transfer, utilice el Server.Execute método en su lugar.
Estado
Este comportamiento es por diseño.

Propiedades

Id. de artículo: 312629 - Última revisión: 08/30/2012 22:32:00 - Revisión: 1.0

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

  • kbexcepthandling kbprb kbmt KB312629 KbMtes
Comentarios