ExecuteCore()vs OnActionExecuting(ActionExecutingContext filterContext)?

时间:2010-12-14 15:13:22

标签: c# asp.net-mvc

好奇,他们听起来很相似。 ExecuteCore()和OnActionExecuting(ActionExecutingContext filterContext)之间有什么区别?

在什么情况下,哪一方比另一方更有用?

2 个答案:

答案 0 :(得分:11)

实际上,它们只是MVC执行流程中的不同点。

  1. ExecuteCore被调用 控制器本身之后的MvcHandler 被实例化。到了这一刻MVC 甚至都不知道怎么做 控制器将调用其动作。 您可以覆盖标准 控制器的ExecuteCore进行调整 它的整体执行过程a 一点点。

  2. OnActionExecuting完全是一个 不同的故事。它被称为 动作过滤器调用 ControllerActionInvoker。那个 点MVC已经知道了这个动作 存在,调用它,获得所有 过滤器(通常定义为 属性)并在一个。中执行它 给定整体执行的时刻 管道(OnActionExecuting, OnActionExecuted,OnResultExecuting 等等。)

  3. 这取决于您在决定使用哪个扩展点时想要实现的目标。

    • 在派生中覆盖ExecuteCore 控制器调整其常见的 行为(事实并非如此) 在正常的应用程序)。
    • 使用过滤器 执行一些额外的任务 似乎与acion本身正交 应该这样做(通常这是一些 类似AOP的逻辑或与数据库会话/事务管理有关。)

答案 1 :(得分:6)

在控制器初始化之后调用

ExecuteCore,而OnActionExecuting在执行管道的后期发生,并在调用控制器操作之前立即调用。在第二种方法中,您可以直接操作actionresult并通过重定向到其他一些操作来短路操作的执行:

filterContext.Result = ...