В чем разница между ControllerContext.HttpContext.Session и HttpContext.Current.Session - PullRequest
2 голосов
/ 23 ноября 2010

Я использую пример, в котором я могу подделать сессию.Это для использования в unittest контроллера mvc.

В тесте я создаю контроллер, а затем делаю это:

FakeHttpContext  httpctx  = new FakeHttpContext(null,null,null,null,mSessionItems );
ControllerContext ctx2 = new ControllerContext(httpctx,new RouteData(), target);

, где mSessionItems - мой сеанс, а targetмой экземпляр контроллера

и действительно, когда я нахожусь в контроллере, читающем this.ControllerContext.HttpContext.Session, у меня есть сеанс, отлично!

, но .... я также читаю сеансвне контроллера, и там я использую HttpContext.Current.Session, и это ноль (или на самом деле, HttpContext.Current - ноль).

Итак, я удивился, в чем разница между этими двумя?

1 Ответ

2 голосов
/ 23 ноября 2010

ControllerContext.HttpContext имеет абстрактный тип HttpContextBase. Реализация по умолчанию этого типа (HttpContextWrapper) обертывает доступ к HttpContext. Поэтому, когда вы создаете ложную реализацию, вы заменяете ее отношение к HttpContext. Поддельная реализация не создаст для вас настоящий HttpContext.

Btw. где вы получаете доступ к сеансу вне контроллера? Откуда ты знаешь, что будет какой-то текущий HttpContext?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...