c# - ¿Cuándo debo usar Response.Redirect(url, true)?
asp.net (5)
Aquí lo mejor es usar true
, porque quiere que todos los demás hilos aborten; ha habido un error y la aplicación no puede continuar.
Estoy redireccionando a una página de error con un mensaje de error embellecido en mi Application_Error
, en Global.asax.
Por el momento dice:
Response.Redirect("Error.aspx", true);
¿Debería ser eso?
Response.Redirect("Error.aspx", false);
No estoy seguro de en qué circunstancias debo usar true
y cuál debería usar false
? La página de MSDN dice que prefiere usar " false
para evitar ThreadAbortExceptions, entonces ¿cuándo debería usar " true
?
Nunca necesita usar true
, ya que hay una sobrecarga sin el parámetro booleano.
Response.Redirect("Error.aspx", false);
o
Response.Redirect("Error.aspx");
El parámetro booleano se agregó para que pueda establecer el redireccionamiento sin detener la ejecución. Si puede salir del código de la página usted mismo sin que esto ocasione ningún costo adicional, como por ejemplo el enlace de datos que se produce, es preferible.
Si lo configura en verdadero, la aplicación finaliza la respuesta y la envía de vuelta al usuario, y si la configura en falso, el código después de la redirección continuará ejecutándose, y el usuario será redirigido a la nueva página después del termina el ciclo de vida de la carga completa de la página.
Utiliza false
cuando no quiere abortar el hilo. Lo que eso significa es que false
hará que el código continúe ejecutándose. Entonces, las líneas de código que aparecen después de Response.Redirect
se ejecutarán. Un true
solo matará el hilo, por lo que no se ejecutará nada más, lo que a su vez arroja una ThreadAbortException
.
Entonces, realmente es una decisión basada en cómo se ve el resto del código en esa situación. En general, desea poner llamadas a Response.Redirect
al final de una ruta de ejecución para que no sea necesario ejecutar nada más. Pero muchas veces ese no es el caso. Es solo una cuestión de cómo controlas el flujo lógico en el código.
Por ejemplo, si la siguiente línea después de Response.Redirect
es una return
y la ruta de ejecución simplemente termina, entonces probablemente estés bien. Pero si hay todo tipo de lógica y su ejecución en este caso dejaría el sistema en un estado desconocido, entonces es posible que desee abortar el hilo.
Personalmente, considero que abortar el hilo es indicativo de un control lógico deficiente. Es similar a un olor de código bien conocido donde las excepciones se utilizan para controlar el flujo lógico, que es universalmente mal visto. Si puede controlar el flujo lógico sin la necesidad de abortar un hilo y lanzar una excepción, probablemente sería preferible.
Response.Redirect (URL, falso): el cliente se redirige a una página nueva y la página actual en el servidor continuará procesando.
Response.Redirect (URL, true): el cliente se redirige a una nueva página, pero se interrumpe el procesamiento de la página actual.
También puede ver este video que muestra las diferencias Response.Redirect (False vs True) ASP.NET Entrevista preguntas con respuestas .