Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can you apply an ActionFilter in ASP.NET-MVC on EVERY action

I want to apply an ActionFilter in ASP.NET MVC to EVERY action I have in my application - on every controller.

Is there a way to do this without applying it to every single ActionResult method ?

like image 370
Simon_Weaver Avatar asked Mar 16 '09 06:03

Simon_Weaver


2 Answers

Yes, you can do this but it's not the way it works out of the box. I did the following:

  1. Create a base controller class and have all of your controllers inherit from it
  2. Create an action filter attribute and have it inherit from FilterAttribute and IActionFilter
  3. Decorate your base controller class with your new action filter attribute

Here's a sample of the action filter attribute:

public class SetCultureAttribute : FilterAttribute, IActionFilter 
{ 
    #region IActionFilter implementation

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        //logic goes here
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //or logic goes here
    }

    #endregion IActionFilter implementation
}

Here's a sample of the base controller class with this attribute:

[SetCulture]
public class ControllerBase : Controller
{
    ...
}

Using this method as long as your controller classes inherits from ControllerBase then the SetCulture action filter would always be executed. I have a full sample and post on this on my blog if you'd like a bit more detail.

Hope that helps!

like image 154
Ian Suttle Avatar answered Sep 17 '22 22:09

Ian Suttle


How things get better...2 years later we have

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorElmahAttribute());
    }
like image 45
Tony Basallo Avatar answered Sep 19 '22 22:09

Tony Basallo