Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET MVC: Execute code on all Actions (global OnActionExecuting?)

Tags:

c#

asp.net-mvc

Is there a "global" OnActionExecuting that I can override to have all my MVC actions (regardless of controller) do something when they get called? If so, how?

like image 742
Alex Avatar asked Sep 16 '09 04:09

Alex


2 Answers

Asp.net MVC3 added support for Global Filters

From the ScottGu blog:

ASP.NET MVC supports the ability to declaratively apply “cross-cutting” logic using a mechanism called “filters”. You can specify filters on Controllers and Action Methods today using an attribute syntax like so:

image

Developers often want to apply some filter logic across all controllers within an application. ASP.NET MVC 3 now enables you to specify that a filter should apply globally to all Controllers within an application. You can now do this by adding it to the GlobalFilters collection. A RegisterGlobalFilters() method is now included in the default Global.asax class template to provide a convenient place to do this (it is then called by the Application_Start() method):

image

The filter resolution logic in MVC 3 is flexible so that you can configure a global filter that only applies conditionally if certain conditions are met (for example: debugging is enabled, or if a request uses a particular http verb, etc). Filters can also now be resolved from a Dependency Injection (DI) container.

like image 83
Eduardo Molteni Avatar answered Nov 13 '22 08:11

Eduardo Molteni


Nope. The easiest way to do this is to write a common base class that all of your controller types subclass, then stick an action filter on that base class or override its OnActionExecuting() method.

like image 39
Levi Avatar answered Nov 13 '22 09:11

Levi