Andrei nói đúng - nó là null vì khi chạy trong khung ASP.NET MVC, HttpContext (và do đó HttpContext.Session) không được đặt khi lớp điều khiển được cấu trúc như bạn có thể mong đợi, nhưng nó được đặt ("tiêm") sau đó bởi lớp ControllerBuilder. Nếu bạn muốn hiểu rõ hơn về vòng đời, bạn có thể kéo xuống khung ASP.NET MVC (nguồn có sẵn) hoặc tham khảo: trang này
Nếu bạn cần truy cập Session thì một cách sẽ là ghi đè phương thức "OnActionExecuting" và truy cập nó ở đó, vì nó sẽ khả dụng vào thời điểm đó.
Tuy nhiên, như Andrei đang đề xuất, nếu mã của bạn phụ thuộc vào Phiên thì có thể khó viết các bài kiểm tra đơn vị, vì vậy có lẽ bạn có thể cân nhắc gói Phiên trong một lớp trợ giúp mà sau đó có thể được hoán đổi cho một lớp khác, không phiên bản web khi chạy trong các bài kiểm tra đơn vị, do đó, loại bỏ khớp nối bộ điều khiển của bạn khỏi web.