Я не могу придумать причину (ДА!! - я могу придумать несколько причин, по которым вы, возможно, захотите сделать это в OnActionExecuting () перед выполнением кода метода Action) для изменения ActionResult с помощью filterContext.Result в метод OnActionExecuting (), но он определенно разрешен.
Порядок исполнения:
- OnActionExecuting ()
- Ваш код метода действия в вашем контроллере
- OnActionExecuted ()
- OnResultExecuting ()
- Независимо от того, что назначенное ActionResult.ExecuteResult () возвращает (отображает представление, json, содержимое и т. Д.)
- OnResultExecuted ()
Как показал ваш эксперимент, вы можете изменить filterContext.Result как в OnActionExecuted (), так и в OnActionExecuting (). Так как OnActionExecuted () вызывается после кода вашего контроллера (пример: возврат RedirectToAction ()), все, что он устанавливает в качестве ActionResult, имеет приоритет.
Я нашел приличное освещение ActionFilters в книге Стивена Сандерсона «Pro ASP.NET MVC framework». [1] [2]
[1] http://books.google.com/books?id=Xb3a1xTSfZgC (содержимое в ActionFilters недоступно в Google Book Preview)
[2] http://blog.codeville.net/2009/04/29/now-published-pro-aspnet-mvc-framework-apress/