ExecuteCore () против OnActionExecuting (ActionExecutingContext filterContext)? - PullRequest
6 голосов
/ 14 декабря 2010

Просто любопытно, они звучат похоже. В чем различия между ExecuteCore () и OnActionExecuting (ActionExecutingContext filterContext)?

В каких ситуациях одно будет более полезным по сравнению с другим?

Ответы [ 2 ]

11 голосов
/ 17 декабря 2010

На самом деле, это просто разные точки в конвейере выполнения MVC.

  1. ExecuteCore вызывается MvcHandler после самого контроллера создается экземпляр. К этому моменту MVC даже не знает о том, как Контроллер вызовет свое действие. Вы можете переопределить стандарт Контроллер ExecuteCore для настройки его общий процесс выполнения немного.

  2. OnActionExecuting является полностью другая история. Это называется во время действие фильтров при вызове ControllerActionInvoker. Тем точка MVC уже знает, что действие существует, вызывает его, получает все фильтры (обычно определяются как атрибуты) и выполняет его в данный момент общего исполнения трубопровод (OnActionExecuting, OnActionExecuted, OnResultExecuting и так далее).

Это зависит от того, чего именно вы хотите достичь, решая, какую точку расширения использовать.

  • Переопределить ExecuteCore в производной Контроллер для настройки его общего поведение (не очень часто бывает в обычном приложении).
  • Используйте фильтры для выполнить некоторые дополнительные задачи, которые кажется ортогональным к тому, что само действие должен делать (часто это некоторые AOP-подобная логика или относится к сеансу базы данных / управлению транзакциями).
6 голосов
/ 14 декабря 2010

ExecuteCore вызывается сразу после инициализации контроллера, в то время как OnActionExecuting происходит на более поздней стадии конвейера выполнения и вызывается непосредственно перед вызовом действия контроллера.Во втором методе вы можете напрямую манипулировать результатом действия и замыкать выполнение действия, перенаправляя, например, какое-то другое действие:

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