繁体   English   中英

ExecuteCore()vs OnActionExecuting(ActionExecutingContext filterContext)?

[英]ExecuteCore() vs OnActionExecuting(ActionExecutingContext filterContext)?

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

在什么情况下,一个人比另一个人更有用?

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

  1. 在实例化控制器本身之后,由MvcHandler调用ExecuteCore。 到目前为止,MVC甚至都不知道控制器将如何调用其动作。 您可以覆盖标准Controller的ExecuteCore来稍微调整其整体执行过程。

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

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

  • 在派生的Controller中覆盖ExecuteCore以调整其常见行为(在普通应用程序中通常不是这种情况)。
  • 使用过滤器执行一些看似与acion本身应该做的正交的其他任务(通常这是一些类似AOP的逻辑或与数据库会话/事务管理有关)。

在初始化控制器之后调用ExecuteCore,OnActionExecuting在执行管道的稍后阶段发生,并在调用控制器操作之前立即调用。 在第二种方法中,您可以通过重定向(例如)到其他一些操作来直接操作actionresult并使操作的执行短路:

filterContext.Result = ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM