Можно ли перехватить ProcessRequest для определения времени ожидания формы до вызова GetControllerInstance? - PullRequest
2 голосов
/ 19 января 2010

В приложении ASP.NET MVC при использовании пользовательского контейнера внедрения зависимостей (в данном случае Unity) возможно ли перехватить запрос перед вызовом GetControllerInstance, чтобы определить, произошло ли тайм-аут аутентификации форм?

У меня есть следующее в web.config:

<authentication mode="Forms">
  <forms loginUrl="~/Home/Index" timeout="10" defaultUrl="~/Home/Index"/>
</authentication>

Если я войду на веб-сайт, дождусь истечения времени ожидания, а затем получу доступ к другой странице (ну, действие контроллера), я быожидали, что фреймворк позаботится об автоматическом перенаправлении меня на ~/Home/Index.Вместо этого он весело пытается создать новый контроллер для обработки запроса, который не выполняется, и я в конечном итоге перенаправляюсь на нашу пользовательскую страницу ошибок.

Глядя на стек вызовов, я думаю, что это должно произойти где-то вокруг MvcHandler.System.Web.IHttpHandler.ProcessRequest или MvcHandler.ProcessRequest .. конечно, прежде чем DefaultControllerFactory.CreateController будет вызван.

Кто-нибудь еще должен был справиться с этой ситуацией?

Обновление: Если честно, ядумаю, что этот подход, вероятно, неверен, и лучшая идея - обработать тайм-аут аутентификации форм на стороне клиента с помощью некоторого JavaScript на главной странице.Затем я мог бы перенаправить на действие, которое очистит сеанс и вернет их на страницу входа, аналогичную , что описано здесь .

1 Ответ

0 голосов
/ 19 января 2010

Вы можете написать фабрику контроллеров, которая обернет фабрику контроллеров Unity (см. Мой пост о делегировании декораторов http://haacked.com/archive/2008/06/18/delegating-decorators.aspx для примера).

Затем на фабрике контроллеров вы можете переопределить GetControllerInstanceоберните вызов делегата в GetControllerInstance вашим кодом до и после.

Имеет ли это смысл?

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