2015-08-16 5 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

A фикция 2: OnActionExecuting

Действие 2: OnActionExecuted

Действие 1: OnActionExecuted

Вопрос - Почему "OnActionExecuted" выполнить в обратном порядке, в то время как "OnActionExecuting" заказ правильно, как я поставляется в атрибуте?

Thanks,

ответ

3

Это задокументированное поведение. Вот ссылка on MSDN:

OnActionExecuting (ActionExecutingContext), OnResultExecuting (ResultExecutingContext) и OnAuthorization (AuthorizationContext) фильтры выполняются в прямом порядке. OnActionExecuted (ActionExecutedContext), OnResultExecuting (ResultExecutingContext) и Фильтры OnException (ExceptionContext) работают в обратном порядке.

Смежные вопросы