2009-11-10 10 views
7

Mi pregunta es esencialmente la misma que la pregunta 765054 en StackOverflow. Solo lo estoy preguntando nuevamente porque la respuesta aceptada es incorrecta (no se puede acceder al objeto de sesión en Application_BeginRequest).¿Cuándo es el primero en que puedo acceder a SESSION en el ciclo de vida de la página ASP.NET MVC?

Nuestro caso de uso es que queremos almacenar el objeto de usuario del usuario autenticado en la sesión. Por lo tanto, en solicitudes posteriores, podemos establecer correctamente IPrincipal e IIdentity en función del objeto de usuario en sesión.

+0

Interesante Debo decir que vale la pena echarle un segundo vistazo. –

Respuesta

3

Hago cosas similares usando un controlador base y anulando OnActionExecuting. Si esto es lo más temprano que se puede hacer o no, no lo sé, pero sí sé que sucederá antes de que se ejecute su acción (y por lo tanto antes de que se visualice la vista). Alternativamente, es posible que desee tener un atributo de autorización personalizado que haga lo que desee. Esta podría ser la única forma de asegurarse de que esté listo antes de que se ejecuten otros atributos.

+0

Acaba de implementar la anulación de OnActionExecuting y funcionó como un amuleto. Se llama a OnActionExecuting antes del filtro de autorización, por lo que esta solución nos funcionará. – Jason

4

Aparentemente AcquireRequestState es el evento más antiguo donde HttpContext.Current.Session no es nulo. Acabo de adjuntar a todos ellos en secuencia y probado. Prefiero usar PreRequestHandlerExecute que ocurre antes de que se llame al constructor de mi controlador.

Esto es relevante si prefiere tener su código o hacer referencia a Global.asax en su lugar. Consulte esta página para ver la lista secuencial de los eventos en el ciclo de vida de la aplicación: http://msdn.microsoft.com/en-us/library/ms178473%28v=vs.100%29.aspx

Cuestiones relacionadas