2015-08-16 68 views
1

我有2個動作濾波器 「ActionFilter1」 &「ActionFilter2,爲什麼「OnActionExecuted」以相反的順序執行?

public class ActionFilter1 : FilterAttribute, IActionFilter 
{ 
    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpContext.Current.Application["Order"] += "Action 1: OnActionExecuting <br/>"; 
    } 

    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     HttpContext.Current.Application["Order"] += "Action 1: OnActionExecuted <br/>"; 
    } 
} 

public class ActionFilter2 : FilterAttribute, IActionFilter 
{ 
    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpContext.Current.Application["Order"] += "Action 2: OnActionExecuting <br/>"; 
    } 

    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     HttpContext.Current.Application["Order"] += "Action 2: OnActionExecuted <br/>"; 
    } 
} 

我施加在與控制器操作方法兩個濾波器 「訂單」,

[ActionFilter1(Order = 1)] 
    [ActionFilter2(Order = 2)] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

雖然頁上的瀏覽器執行時,我得到下面的執行動作濾波器輸出,

操作1:OnActionExecuting

甲ction 2:OnActionExecuting

行動2:OnActionExecuted

動作1:OnActionExecuted

問題 - 爲什麼 「OnActionExecuted」 執行以相反的順序,而 「OnActionExecuting」 順序是正確的,因爲我的屬性提供?

謝謝,

回答

3

這是記錄的行爲。這裏是鏈接on MSDN

的OnActionExecuting(ActionExecutingContext), OnResultExecuting(ResultExecutingContext)和 OnAuthorization(AuthorizationContext)過濾前的順序運行。 OnResultExecuting(ResultExecutingContext)和 OnException(ExceptionContext)過濾器以相反的順序運行。