【发布时间】:2010-12-14 15:13:22
【问题描述】:
只是好奇,它们听起来很相似。 ExecuteCore() 与 OnActionExecuting(ActionExecutingContext filterContext) 有什么区别?
在什么情况下一种比另一种更有用?
【问题讨论】:
标签: c# asp.net-mvc
只是好奇,它们听起来很相似。 ExecuteCore() 与 OnActionExecuting(ActionExecutingContext filterContext) 有什么区别?
在什么情况下一种比另一种更有用?
【问题讨论】:
标签: c# asp.net-mvc
实际上,它们只是 MVC 执行管道中的不同点。
ExecuteCore 由 控制器本身之后的 MvcHandler 被实例化。到了这个时候 MVC 甚至不知道如何 控制器将调用其操作。 您可以覆盖标准 控制器的 ExecuteCore 进行调整 其整体执行过程a 一点点。
OnActionExecuting 是一个完全 不同的故事。它被称为期间 动作过滤调用 控制器动作调用者。就这样 点 MVC 已经知道该动作 存在,调用它,获得所有 过滤器(通常定义为 属性)并在一个 给定的整体执行时刻 管道(OnActionExecuting, OnActionExecuted, OnResultExecuting 等等)。
这取决于您在决定使用什么扩展点时究竟想要实现什么。
【讨论】:
ExecuteCore 在控制器初始化后立即调用,而OnActionExecuting 发生在执行管道的后期,并在调用控制器操作之前立即调用。在第二种方法中,您可以直接操作动作结果并通过重定向到其他动作来缩短动作的执行:
filterContext.Result = ...
【讨论】: