Подтвердить что ты не робот

Почему в ASP.NET существуют два несовместимых типа состояний сеанса?

Я вижу два способа работы с данными сеанса в ASP.NET MVC:

  • System.Web.SessionState.HttpSessionState, доступный на HttpApplication
  • System.Web.HttpSessionStateBase, доступный на Controller

Данные, хранящиеся в одном, как представляется, доступны в другом.

К сожалению, единственным общим предком этих двух типов является System.Object, что означает, что я не могу создать код полезной утилиты для абстракции.

Почему API такой? Есть ли разница между двумя недостатками?

4b9b3361

Ответ 1

В ASP.NET MVC абстракции над классическими объектами HttpContext были введены запрос, ответ, сеанс. Они представляют абстрактные классы и раскрываются во всей структуре MVC, чтобы скрыть базовый контекст и упростить модульное тестирование, поскольку абстрактные классы могут быть издевались.

Например, для объекта сеанса вы HttpSessionStateBase и его реализации HttpSessionStateWrapper.

Вот пример того, как конвертировать между классическим сеансом ASP.NET и абстракцией:

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

Итак, System.Web.SessionState.HttpSessionState, о котором вы говорите, является базовым объектом сеанса, который существовал со времен классического ASP.NET 1.0. В MVC этот объект завернут в HttpSessionStateWrapper. Но поскольку ASP.NET MVC является приложением ASP.NET, вы все равно получаете Global.asax, в котором у вас есть голый сеанс.