2009-11-10 34 views
7

Câu hỏi của tôi về cơ bản giống như câu hỏi 765054 trên StackOverflow. Tôi chỉ hỏi lại lần nữa vì câu trả lời được chấp nhận là không chính xác (bạn không thể truy cập đối tượng phiên trong Application_BeginRequest).Khi nào là sớm nhất tôi có thể truy cập SESSION trong vòng đời trang ASP.NET MVC?

Trường hợp sử dụng của chúng tôi là chúng tôi muốn lưu trữ đối tượng người dùng của người dùng đã được xác thực trong phiên. Vì vậy, trong các yêu cầu tiếp theo, chúng tôi có thể thiết lập chính xác IPrincipal và IIdentity dựa trên đối tượng người dùng trong phiên.

+0

Thú vị tôi phải nói, đáng xem lần thứ hai. –

Trả lời

3

Tôi làm những việc tương tự bằng bộ điều khiển cơ sở và ghi đè OnActionExecuting. Cho dù đây là sớm nhất nó có thể được thực hiện hay không, tôi không biết, nhưng tôi biết rằng nó sẽ xảy ra trước khi hành động của bạn được thực hiện (và do đó trước khi xem được trả lại). Hoặc bạn có thể muốn có một thuộc tính ủy quyền tùy chỉnh thực hiện những gì bạn muốn. Đây có thể là cách duy nhất để đảm bảo rằng nó được thực hiện trước khi các thuộc tính khác đang chạy.

+0

Chỉ cần thực hiện ghi đè OnActionExecuting và nó hoạt động như một nét duyên dáng. OnActionExecuting được gọi trước khi ủy quyền bộ lọc để giải pháp này sẽ làm việc cho chúng ta. – Jason

4

Rõ ràng AcquireRequestState là sự kiện sớm nhất mà HttpContext.Current.Session không phải là rỗng. Tôi chỉ gắn liền với tất cả chúng theo trình tự và thử nghiệm. Tôi thích sử dụng PreRequestHandlerExecute xảy ra trước khi hàm tạo trên bộ điều khiển của tôi được gọi.

Điều này có liên quan nếu bạn muốn thay thế mã của mình hoặc tham chiếu từ Global.asax. Xem trang này để biết danh sách tuần tự của các sự kiện trong vòng đời của ứng dụng: http://msdn.microsoft.com/en-us/library/ms178473%28v=vs.100%29.aspx

Các vấn đề liên quan