18 votos

ASP.NET: ¿Qué ocurre con el código después de la Respuesta.Redirect(...)?

No Respuesta.Redirect() causa la actualidad el método de funcionamiento para abortar? O ¿de código después de la Respuesta.Redirect() ejecutar también?

(Que es, es necesario return/Exit Sub después de una Respuesta.Redirect?)

24voto

Martin Liversage Puntos 43712

Response.Redirect tiene una sobrecarga de aceptar un argumento booleano que indica si la llamada a Response.Redirect debería final de la respuesta. Llamar a la sobrecarga sin este argumento es el mismo como la especificación de true para indicar que la respuesta final.

Terminando la respuesta significa que Response.End se llama después de que la respuesta ha sido modificado para hacer la redirección a suceder, y Response.End lanza un ThreadAbortException al finalizar el módulo actual.

Cualquier código después de una llamada a Response.Redirect nunca es llamado (a menos que usted proporcione false extra para el argumento). En realidad, el código en finally y ciertos catch controladores se va a ejecutar, pero no se puede tragar un ThreadAbortException.

18voto

David Stratton Puntos 45298

Esto puede no ser una respuesta completa, pero por lo que he visto...

Respuesta.Redirigir hace, en realidad causar el código para detener la ejecución por el lanzamiento de un Sistema.Las operaciones de roscado.ThreadAbortException.

Usted puede ver esto por ti mismo mediante la configuración global de manejo de errores en el Mundial.Asax y pruebas de una Respuesta.Redirigir.

EDITAR

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

Redirigir llamadas Final que plantea una ThreadAbortException excepción a la finalización.

HttpResponse.Método Redirect (String, Boolean) (El Sistema.Web)

2voto

Jon Puntos 1777

Hay otro parámetro de la Respuesta.Redirigir la llamada endResponse. La configuración es falso, es una buena idea cuando estás redirigiendo en un bloque try catch porque el contexto todavía necesita el control correcto. Por lo que su bloque catch recogerá la excepción.

La contrapartida de esto es que cuando la página no es Cancelable, no intentar recuperar el control. El caso más común de esto es Global.asax. Así que usted no necesita preocuparse acerca de esta excepción en ese contexto. Si usted no me cree, pruebe que refleja el código de este método y echar un vistazo.

Así que para responder a tu pregunta, no es necesario hacer mucho después de una Respuesta.Redirigir al establecer endResponse a true, lo que es por defecto (es decir, la llamada con el método que no toma un bool).

0voto

MunkiPhD Puntos 2610

Mi entendimiento es que al momento de la emisión de una Respuesta.Redirect(), el código siguiente, no se ejecutará. Si usted piensa acerca de ello, tendría sentido de no ejecutar. Básicamente lo que hace es decirle a su código que desea ir a algún otro sitio.

Ejemplo: Piense en ello como el pedido de un valor de la comida en McDonalds. Después de hacer el pedido y ellos comienzan a llenar su copa, cambia tu mente y decir "sabes que te olvides de mi pedido. Voy a Redirigir a mí mismo a Wendy." En ese momento, van a dejar de hacer su fritas y hamburguesa porque, bueno... ya te has decidido a ir a otro lugar, es decir, redirigir la respuesta.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: