ASP.NET MVC ActionFilterAttribute的執行順序


http://diaosbook.com/Post/2014/6/3/execution-order-of-actionfilter-aspnet-mvc

ASP.NET MVC里面我們要自定義ActionFilter的時候會發現有4個方法可以override:OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted。他們分別在什么時候執行一直是困擾人類的一個問題。我代表人類做了一個簡單的實驗:

首先自定義一個ActionFilter,每個方法執行的時候都在VS的OUTPUT窗口輸出信息:

public class TestActionFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { Debug.WriteLine("OnActionExecuting"); base.OnActionExecuting(filterContext); } public override void OnActionExecuted(ActionExecutedContext filterContext) { Debug.WriteLine("OnActionExecuted"); base.OnActionExecuted(filterContext); } public override void OnResultExecuting(ResultExecutingContext filterContext) { Debug.WriteLine("OnResultExecuting"); base.OnResultExecuting(filterContext); } public override void OnResultExecuted(ResultExecutedContext filterContext) { Debug.WriteLine("OnResultExecuted"); base.OnResultExecuted(filterContext); } }

Controller里為了搞清執行順序,也需要輸出:

[TestActionFilter] public ActionResult Index() { Debug.WriteLine("Before return View()"); return View(); }

最后是View:

@{ Debug.WriteLine("Hello from Index.cshtml"); }

執行結果是這樣的,有圖有JJ:

1. OnActionExecuting

2. Before return View()

3. OnActionExecuted

4. OnResultExecuting

5. Hello from Index.cshtml

6. OnResultExecuted


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM