Андрей прав - это null, потому что при работе в среде ASP.NET MVC HttpContext (и, следовательно, HttpContext.Session) не устанавливается, когда класс контроллера конструируется, как вы могли ожидать, но он устанавливается («внедряется») позже. классом ControllerBuilder. Если вы хотите лучше понять жизненный цикл, вы можете либо вытащить платформу ASP.NET MVC (источник доступен), либо обратиться к этой странице.
Если вам нужно получить доступ к сеансу, то одним из способов было бы переопределить метод «OnActionExecuting» и получить доступ к нему там, так как он будет доступен к тому времени.
Однако, как предлагает Андрей, если ваш код зависит от сеанса, то потенциально может быть сложно писать модульные тесты, поэтому, возможно, вы могли бы подумать о том, чтобы обернуть сеанс во вспомогательный класс, который затем можно заменить на другой, не веб-версия при запуске в модульных тестах, поэтому отключите ваш контроллер от Интернета.