8 oct 2008

ThreadAbortException Response.Redirect

Gracias a Pigosky, un geniecillo de la informática, que me pasó este artículo donde se trata el error producido por el Response.Redirect o el Server.Transfer.

Resumiendo se produce porque el Response.Redirect() internamente llama a Response.End() que a su vez llama a Thread.Abort() lo que produce el error.

Para resolver esto usamos el método con el segundo parámetro en false, o sea:
Response.Redirect(mipagina.aspx, false) ;
Con esto evitamos que se llame a Response.End(). Si bien esto resuelve en la mayoría de lo casos el error, es más seguro y eficiente añadir inmediatamente después la linea:
HttpContext.Current.ApplicationInstance.CompleteRequest();
para dar por finalizado el request de la pagina y que ésta no se siga dibujando ni ejecutando.

Ademas como indica el articulo es recomendable hacer override de los métodos RaisePostBackEvent y Render aunque esto último no es tan necesario.

Roy {aka. Foy}

Autor & Editor

Desarrallador y líder técnico, con experiencia en tecnologías Microsoft desde los tiempos del VB6 y el asp clásico hasta el .Net Core, pasando por COM+, javascript, angularjs, Ionic, xaml, cordova, MVC, Web Api, Sql Server, Oracle... . Ávido lector, apasionado programador.

1 comments:

Unknown dijo...

Interesante Mr. Foy, conozco una aplicación que tiene muchos de esos errores en el Event Log, voy a implementar esta solución.