user584018
user584018

Reputation: 11304

Why "OnActionExecuted" execute in reverse order?

I have 2 action filters "ActionFilter1" & "ActionFilter2,

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/>";
    }
}

I applied both filters on an controller action method with "Order",

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

While Page is executed on browser, I got below output of action filters executing,

Action 1: OnActionExecuting

Action 2: OnActionExecuting

Action 2: OnActionExecuted

Action 1: OnActionExecuted

Question - Why "OnActionExecuted" execute in reverse order, while "OnActionExecuting" order is correct as I supplied in attribute?

Thanks,

Upvotes: 1

Views: 319

Answers (1)

dotnetom
dotnetom

Reputation: 24901

This is documented behavior. Here is the link on MSDN:

The OnActionExecuting(ActionExecutingContext), OnResultExecuting(ResultExecutingContext), and OnAuthorization(AuthorizationContext) filters run in forward order. The OnActionExecuted(ActionExecutedContext), OnResultExecuting(ResultExecutingContext), and OnException(ExceptionContext) filters run in reverse order.

Upvotes: 3

Related Questions