In what order are filters executed in asp.net mvc

asp.net Mvcasp.net Mvc-3FilterAction Filter

asp.net Mvc Problem Overview


In MVC we can decorate action methods with different filters like

[HttpPost]
[Authorize]
public ActionResult mymethod(){}

HttpPost derives from MethodSelectorAttribute (probably indirectly) and the Authorize attribute inherits from ActionFilterAttribute.

My question is: in which order are they executed in the MVC request pipeline? I tried to go search in MVC source code but failed to find the relevant code bits.

asp.net Mvc Solutions


Solution 1 - asp.net Mvc

Filters run in the following order:

  1. Authorization filters
  2. Action filters
  3. Response filters
  4. Exception filters

For example, authorization filters run first and exception filters run last. Within each filter type, the Order value specifies the run order. Within each filter type and order, the Scope enumeration value specifies the order for filters. This enumeration defines the following filter scope values (in the order in which they run):

  1. First
  2. Global
  3. Controller
  4. Action
  5. Last

Extracted from MSDN

Solution 2 - asp.net Mvc

To save you some time, this is how you set the order:

[MyCustomContextFilter(Order=1)]

The index is 0 based, so you can do 0, 1, 2, etc...

It should be noted that just because a filter is on the base class doesn't tell MVC to apply it first :(.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMuhammad Adeel ZahidView Question on Stackoverflow
Solution 1 - asp.net MvcErangaView Answer on Stackoverflow
Solution 2 - asp.net MvcProVegaView Answer on Stackoverflow