10

Como se sugiere elsewhere, estoy utilizando redirectMode = ResponseRewrite en mi configuración personalizada de error para que mi página de error personalizado pueda acceder a la información de excepción. Esto ha funcionado como un encanto por algún tiempo.¿Por qué es HttpContext.Session null cuando redirectMode = ResponseRewrite

Al agregar algunas funciones de tipo "ayudar al usuario a recuperarse de un error", necesitamos una información previamente almacenada en Session. Al implementar esto, encontré que las diversas avenidas de Session terminan en null cuando redirectMode = ResponseRewrite, pero todas se completan cuando redirectMode = ResponseRedirect (o no está definido).

¿Alguien sabe por qué? Parece extraño que tengamos que elegir entre tener información de excepción (ResponseRewrite) o tener Session (ResponseRedirect).

El MSDN article en el manejo rico de errores personalizados me dice que la sesión solo está disponible cuando el método de paso de control es Server.Transfer, que es lo que asumí ResponseRewrite utilizado bajo el capó. Evidentemente ese no es el caso.

+0

+1 Estoy teniendo exactamente el mismo problema –

+1

Mauricio, todavía no sé la respuesta a la pregunta, pero para pasarla, tomé el atributo redirectMode de mi configuración web y puse la lógica personalizada en el Global.asax Application_Error handler para hacer lo que quería. Estoy reemplazando la excepción con una excepción de mensaje "amigable para el usuario", pero esencialmente la lógica de transferencia es: if (Context.IsCustomErrorEnabled) { Server.Transfer ("~/Error.aspx"); } Luego, la página Error.aspx tiene el código Page_Load para sacar el error fuera de contexto y mostrar el mensaje. – Josh

+0

@Josh, que se ve bien, póngalo en una respuesta para que pueda decirlo mejor :-) –

Respuesta

5

Aún no sé la respuesta a la pregunta, pero para pasarla, tomé el atributo redirectMode fuera de mi configuración web y puse lógica personalizada en el controlador Global.asax Application_Error para hacer lo que quería. Estoy reemplazando la excepción con un "fácil de usar" excepción mensaje, pero esencialmente la lógica de transferencia es:

if(Context.IsCustomErrorEnabled)
{
Server.Transfer("~/Error.aspx");
}

A continuación, la página Error.aspx Tiene código Load para tirar el error fuera de contexto y mostrar el mensaje .

Cuestiones relacionadas