simple page net example code aspx asp asp.net page-lifecycle

asp.net - page - events asp net



ASP.NET: ¿Qué sucede con el código después de Response.Redirect(...)? (4)

¿Response.Redirect () hace que el método actualmente en ejecución se cierre? ¿O también se ejecuta el código después de Response.Redirect ()?

(Es decir, ¿es necesario regresar / Salir de Sub después de un Response.Redirect?)


Hay otro parámetro para Response.Redirect llamado endResponse. Establecerlo como falso es una buena idea cuando está redirigiendo en un bloque try catch porque el contexto aún necesita control para ser correcto. Por lo tanto, tu bloque de catch recogerá la excepción.

La advertencia al respecto es que cuando la página no es Cancelable, no intentará obtener el control. El caso más común de esto es Global.asax. Entonces, no necesita preocuparse por esta excepción en ese contexto. Si no me cree, intente reflejar el código de este método y eche un vistazo.

Entonces, para responder a su pregunta, no es necesario hacer mucho después de un Response.Redirect cuando establece endResponse en true, que es por defecto (es decir, llamado con el método que no toma un bool).


Puede que esta no sea una respuesta completa, pero por lo que he visto ...

Response.Redirect sí hace que el código deje de ejecutarse lanzando System.Threading.ThreadAbortException.

Puede verlo usted mismo configurando el manejo global de errores en Global.Asax y probando un Response.Redirect.

EDITAR

y aquí hay un enlace a la documentación que respalda mi respuesta:

Redirigir llamadas Finalizar, lo que genera una excepción ThreadAbortException al finalizar.

HttpResponse.Redirect Method (String, Boolean) (System.Web)


Tengo entendido que al emitir un Response.Redirect (), el código que lo sigue no se ejecutará. Si lo piensas, tendría sentido no ejecutarlo. Básicamente le está diciendo a su código que quiere ir a otro lugar.

Ejemplo: Piense en pedir una comida de valor en McDonalds. Después de que lo pidas y empiecen a llenar tu bebida, cambias de opinión y dices "ya sabes qué, olvídate de mi orden. Voy a redirigirme a Wendy''s". En ese punto, van a dejar de hacer tus papas fritas y hamburguesas porque, bueno ... has decidido ir a otra parte, es decir, redirigir la respuesta.


Response.Redirect tiene una sobrecarga que acepta un argumento booleano que indica si la llamada a Response.Redirect debe finalizar la respuesta . Llamar a la sobrecarga sin este argumento es lo mismo que especificar true para indicar que la respuesta debe finalizar.

Finalizar la respuesta significa que se llama a Response.End después de que se modificó la respuesta para que se produzca la redirección, y Response.End arroja una ThreadAbortException para terminar el módulo actual.

Cualquier código después de una llamada a Response.Redirect nunca se llama (a menos que suministre false para el argumento adicional). En realidad, el código finally y ciertos controladores de catch se ejecutarán, pero no se puede tragar una ThreadAbortException .