¿Por qué hay dos tipos de estado de sesión incompatibles en ASP.NET?


Veo dos formas de trabajar con datos de sesión en ASP.NET MVC:

  • System.Web.SessionState.HttpSessionState, disponible en HttpApplication
  • System.Web.HttpSessionStateBase, disponible en Controller

Los datos almacenados en uno parecen estar disponibles en el otro.

Desafortunadamente el único ancestro común de estos dos tipos es System.Object, lo que significa que no puedo crear código de utilidad reutilizable para la abstracción de ninguno de los dos.

¿Por qué es la API de esta manera? Hay una diferencia importante entre los dos que me faltan?

Author: Drew Noakes, 2011-03-27

1 answers

En ASP.NET Se introdujeron abstracciones MVC sobre los objetos HttpContext clásicos Request, Response, Session. Representan clases abstractas y están expuestas en todo el framework MVC para ocultar el contexto subyacente y simplificar las pruebas unitarias porque las clases abstractas pueden ser burladas.

Por ejemplo, Para el objeto de sesión tiene HttpSessionStateBase y su aplicación HttpSessionStateWrapper.

Aquí hay un ejemplo de cómo convertir entre el clásico ASP.NET período de sesiones y la abstracción:

HttpSessionStateBase session = new HttpSessionStateWrapper(HttpContext.Current.Session);

Así que el System.Web.SessionState.HttpSessionState al que se refiere es el objeto de sesión subyacente que existía desde classic ASP.NET 1.0. En MVC este objeto está envuelto en un HttpSessionStateWrapper. Pero desde ASP.NET MVC es un ASP.NET aplicación que todavía obtiene el Global.asax en el que tienes la sesión desnuda.

 84
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-27 08:48:39