Simon_Weaver
Simon_Weaver

Reputation: 145950

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 ?

Upvotes: 7

Views: 2644

Answers (3)

Tony Basallo
Tony Basallo

Reputation: 3074

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

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorElmahAttribute());
    }

Upvotes: 5

Richard Szalay
Richard Szalay

Reputation: 84744

You don't have to apply it to every action, you can just apply it to every controller (ie. put the attribute on the class, not the method).

Or, as Ian mentioned, you can put it on a base controller class and then extend from that controller.

Upvotes: 0

Ian Suttle
Ian Suttle

Reputation: 3402

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!

Upvotes: 10

Related Questions