Asp.net-Mvc

為什麼我的所有 ActionFilter 都不執行?

  • March 30, 2015

我今天早些時候問了一個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你的方法,否則你實際上並沒有替換基類上的方法。我原以為編譯器會抱怨您需要 anewoverride在它上面。如果您不包含override關鍵字,它的行為就像您使用了new. 由於框架將其作為 ActionFilterAttribute 呼叫,這意味著您的方法將永遠不會被呼叫。

引用MSDN

如果派生類中的方法前面沒有 new 或 override 關鍵字,編譯器將發出警告,並且該方法的行為就像存在 new 關鍵字一樣。

如果它對使用 MVC 4/5 的任何人都有幫助:

如果您獲得ActionFilterAttributeIActionFilter錯誤的命名空間,則 ActionFilters 不會執行:https ://stackoverflow.com/a/13710468/188926

用於System.Web.Http.FiltersWeb API,System.Web.Mvc用於標準 MVC 操作。

與問題一樣,如果您弄錯了 filter 屬性,它將被簡單地忽略(沒有錯誤),這使得診斷變得困難。

引用自:https://stackoverflow.com/questions/934647