asp.net - Response.Redirect no termina la ejecución
(6)
Tengo la página Default.aspx, que hereda de BasePage.cs, que hereda de System.Web.UI.Page. En BasePage hago algunas cosas comunes que cada página debe hacer al cargar.
En BasePage, digamos que estoy buscando X. Si X = 1, me redirigiré a mi página "Discontinued.aspx" inmediatamente y detendré la ejecución de BasePage. Si encuentro X = 1, digo:
HttpContext.Current.Response.Redirect ("Discontinued.aspx", verdadero);
Quiero que la redirección detenga la ejecución de BasePage e inmediatamente salte - de ahí el "verdadero" en la declaración anterior - que debería detener la ejecución de la página actual, según tengo entendido. El problema es que no. Estoy esperando que la redirección genere la "excepción de interrupción de hilo".
Cuando me ejecuto en modo de depuración, sigue avanzando como si no acabara de redirigir y salir.
Pero el redireccionamiento aún se inició: una vez que termine de recorrer el resto de BasePage, la página "Discontinued" comienza a cargar como resultado de la redirección.
¿Hay alguna razón por la que mi Redirect no mate la ejecución de BasePage?
El segundo parámetro para Response.Redirect es endResponse
, sin embargo, la información sobre herramientas dice ''Indica si la ejecución de la página actual debe finalizar''. Esto es engañoso, porque la ejecución de la página no termina cuando la variable es verdadera. Terminará de ejecutar cualquier código. Sin embargo, lo que sucede de manera diferente es que los eventos de Renderización se cancelan y la respuesta se vacía inmediatamente con el encabezado objeto movido.
Necesita salir manualmente de cualquier método, Response.Redirect / Response.End no lo hará por usted. Además, si necesita un condicional para ver si la página ha sido redirigida, consulte Response.IsRequestBeingRedirected.
¡Voy a bajar, voté por esto! Maldice mi ignorancia ...
Obviamente, podrías intentar agregar la siguiente línea después de la redirección (como se señala por recursivo),
response.end()
Pero tal vez la razón por la que response.redirect no está causando la redirección de inmediato es que tiene buffering de respuesta en (el valor predeterminado) y el procesamiento de la página no termina hasta que se vacía el búfer. Si esto fuera cierto (y reconozco que también soy perezoso), entonces agregar la siguiente línea también resolvería tu problema.
response.flush()
¿Estás saliendo de la función que llama a redirigir, por ejemplo?
...redirect(stopit,true);
return;
?
Para una terminación incondicional, podría intentar un
Response.End()
Probablemente estás llamando al método Response.Redirect dentro de un bloque try {} catch {}, pruébalo llamando fuera de este bloque y verás que no fallará. Más información: http://www.velocityreviews.com/forums/t72105-responseredirect-in-a-trycatch.html Espero que esto ayude.
Puede lanzar una excepción, que saldrá de la ejecución del código, pero aún así redirigirá:
HttpContext.Current.Response.Redirect("/login", true);
throw new Exception("Unauthorized Access");