2009-11-10 10 views
7

Moje pytanie jest zasadniczo takie samo jak pytanie 765054 dotyczące StackOverflow. Pytam tylko, ponieważ zaakceptowana odpowiedź jest niepoprawna (nie można uzyskać dostępu do obiektu sesji w Application_BeginRequest).Kiedy najwcześniej mogę uzyskać dostęp do SESJI w cyklu życia strony ASP.NET MVC?

Naszym przypadkiem użycia jest to, że chcemy przechowywać obiekt użytkownika uwierzytelnionego użytkownika w sesji. W kolejnych żądaniach możemy poprawnie ustawić IPrincipal i IIdentity na podstawie obiektu użytkownika w sesji.

+0

Interesujące, muszę powiedzieć, warte drugiego spojrzenia. –

Odpowiedz

3

Robię podobne rzeczy za pomocą kontrolera bazowego i przesłaniam OnActionExecuting. Niezależnie od tego, czy jest to najwcześniejsze, czy nie, nie wiem, ale wiem, że stanie się to przed wykonaniem działania (a zatem przed renderowaniem widoku). Alternatywnie możesz chcieć mieć niestandardowy atrybut autoryzacji, który robi to, co chcesz. To może być jedyny sposób, aby upewnić się, że jest wykonywany przed uruchomieniem innych atrybutów.

+0

Po prostu zaimplementowano nadpisanie OnActionExecuting i zadziałało jak urok. OnActionExecuting jest wywoływany przed filtrem autoryzacji, więc to rozwiązanie będzie dla nas działać. – Jason

4

Najwyraźniej AcquireRequestState jest najwcześniejszym wydarzeniem, w którym HttpContext.Current.Session nie jest pusta. Po prostu przywiązałem się do nich wszystkich po kolei i testowałem. Wolę używać PreRequestHandlerExecute, który występuje przed wywołaniem konstruktora na moim kontrolerze.

Jest to istotne, jeśli wolisz zamiast tego swój kod lub odniesienie do pliku Global.asax. Zobacz tę stronę dla sekwencyjnej listy zdarzeń w cyklu życia aplikacji: http://msdn.microsoft.com/en-us/library/ms178473%28v=vs.100%29.aspx

Powiązane problemy