為什麼我的所有 ActionFilter 都不執行?
我今天早些時候問了一個
ActionFilters關於ASP.Net MVC 的問題。原來我的問題真的是我ActionFilter什至沒有執行。除其他外,我閱讀了這篇文章,但我找不到他做的任何我不做的事情。這是我的程式碼:
// The ActionFilter itself public class TestingIfItWorksAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { filterContext.Controller.TempData["filter"] = "it worked!"; base.OnActionExecuting(filterContext); } } // The Controller Action with the filter applied [TestingIfItWorks] public ActionResult Test() { var didit = TempData["filter"]; return View(); }filter 方法中的斷點在我調試時永遠不會被命中,並且在呈現視圖時會
TempData["filter"]保存一個值。null為什麼這不起作用?
根據您對另一個答案的評論
通過單元測試進行測試時,不會呼叫過濾器。如果要呼叫過濾器,則需要模仿 ControllerActionInvoker。最好單獨測試過濾器本身,然後使用反射來確保過濾器以正確的屬性應用於您的操作。我更喜歡這種機制,而不是組合測試過濾器和操作。
原來的
當然你需要一個
override你的方法,否則你實際上並沒有替換基類上的方法。我原以為編譯器會抱怨您需要 anew或override在它上面。如果您不包含override關鍵字,它的行為就像您使用了new. 由於框架將其作為 ActionFilterAttribute 呼叫,這意味著您的方法將永遠不會被呼叫。引用MSDN:
如果派生類中的方法前面沒有 new 或 override 關鍵字,編譯器將發出警告,並且該方法的行為就像存在 new 關鍵字一樣。
如果它對使用 MVC 4/5 的任何人都有幫助:
如果您獲得
ActionFilterAttribute或IActionFilter錯誤的命名空間,則 ActionFilters 不會執行:https ://stackoverflow.com/a/13710468/188926用於
System.Web.Http.FiltersWeb API,System.Web.Mvc用於標準 MVC 操作。與問題一樣,如果您弄錯了 filter 屬性,它將被簡單地忽略(沒有錯誤),這使得診斷變得困難。