2010-12-14 23 views

回答

10

事實上,他們在MVC執行流水線只是不同點。

  1. ExecuteCore由 MvcHandler控制器本身 被實例之後被調用。到目前爲止,MVC 甚至不知道控制器將如何調用其操作。 你可以重寫標準 控制器的ExecuteCore來調整其整體執行過程 一點點。

  2. OnActionExecuting是一個完全的 不同的故事。它在調用 ControllerActionInvoker時調用 動作過濾器。由 點MVC已經知道行動 存在,調用它,獲得所有 過濾器(通常定義爲 屬性)和整體執行 管道的 特定時刻(OnActionExecuting, OnActionExecuted,執行它OnResultExecuting 等)。

這取決於您在決定使用哪個擴展點時要實現的目標。在衍生 控制器

  • 覆蓋ExecuteCore來調整其共同 行爲(不是真的經常發生的情況 在正常的應用程序)。
  • 使用過濾器 執行 似乎正交什麼acion本身 應該做一些額外的工作(通常這是一些 AOP樣的邏輯或涉及到數據庫會話/事務管理)。
5

ExecuteCore在控制器初始化之後被調用,而OnActionExecuting在執行管道的後期階段發生,並在調用控制器動作之前立即被調用。在第二種方法,你可以直接例如重定向到一些其他的動作操縱行動的ActionResult和短路執行:

filterContext.Result = ... 
+2

什麼樣的場景適合每種方法?我看到了一個本地化的例子,它使用ExecuteCore來獲取語言/文化設置。我已經使用OnActionExecuting添加一些常見的viewdata,所有操作都使用......只是好奇。謝謝! – Chaddeus 2010-12-15 00:55:53

相關問題