在什么情况下,哪一方比另一方更有用?
答案 0 :(得分:11)
实际上,它们只是MVC执行流程中的不同点。
ExecuteCore被调用 控制器本身之后的MvcHandler 被实例化。到了这一刻MVC 甚至都不知道怎么做 控制器将调用其动作。 您可以覆盖标准 控制器的ExecuteCore进行调整 它的整体执行过程a 一点点。
OnActionExecuting完全是一个 不同的故事。它被称为 动作过滤器调用 ControllerActionInvoker。那个 点MVC已经知道了这个动作 存在,调用它,获得所有 过滤器(通常定义为 属性)并在一个。中执行它 给定整体执行的时刻 管道(OnActionExecuting, OnActionExecuted,OnResultExecuting 等等。)
这取决于您在决定使用哪个扩展点时想要实现的目标。
答案 1 :(得分:6)
ExecuteCore,而OnActionExecuting在执行管道的后期发生,并在调用控制器操作之前立即调用。在第二种方法中,您可以直接操作actionresult并通过重定向到其他一些操作来短路操作的执行:
filterContext.Result = ...