ASP.NET MVC 3: Global Action Filters

Una de las características que trae ASP.NET MVC 3 son los Global Action Filters. Los Action Filters nos permiten ejecutar lógica antes o después de ejecutar un método de acción. Si bien esta caracteristica viene en la versión de MVC 2, para la versión de MVC 3 se trabajo en filtros de acción globales para que se ejecuten en todos los métodos de acción (es decir que va a aplicar a todos los controladores de una aplicación).

Una de las ventajas de esto es que nos evita tener que estar especificando los atributos acción por acción.

Lo primero que vamos hacer es crear un Action Filter, para ello lo que debemos hacer generar una clase que herede de HandleLoggingAttribute. Para este ejemplo, nuestro filtro será responsable de ir loggenado los accesos a las distintos métodos de acción utilizando la librería Log4net:

 

1: public class HandleLoggingAttribute : ActionFilterAttribute
2: {
4:     public override void OnActionExecuted(ActionExecutedContext context)
5:     {
6:         base .OnActionExecuted(context);
8:         LogAcces(context);
9:     }
10:
11:     private void LogAcces(ActionExecutedContext context)
12:     {
13:         ILog log = LogManager .GetLogger("log4Net");
14:         log.Debug(string.Format("Accediendo: acción {0} del controlador {1}", 
15:                                 context.ActionDescriptor.ActionName,
16:                                 context.Controller.ToString()));
17:     }
18: }

 

Como vemos, nuestra intensión es loggear solamente el acceso a los métodos de acción, por lo tanto solo sobre-escribimos el método OnActionExecuted() que es el que se ejecuta antes de el método de acción.

Creado nuestro filtro, solo nos queda registrarlo, para ello dentro del archivo Global.asax en el método Application_Start() escribimos lo siguiente:

 

1:         protected void Application_Start()
2:         {
3:             AreaRegistration .RegisterAllAreas();
4:
5:             // Registramos nuestro action filter.
6:             GlobalFilters .Filters.Add(new HandleLoggingAttribute ());
7:
8:             RegisterGlobalFilters(GlobalFilters .Filters);
9:             RegisterRoutes(RouteTable .Routes);
10:             RegisterLog();
11:         }

 

Ejecutamos y vamos a ver que en nuestro archivo de log va a ir quedando el registro de los accesos a cada uno de los métodos de acción a los cuales se van a ir invocando:

Log de acceso a los métodos de acción

Log de acceso a los métodos de acción

Espero que les sirva!

Anuncios

7 comentarios en “ASP.NET MVC 3: Global Action Filters

    • Hola!

      El método RegisterLog() es un método que se encarga de registrar-configurar el componente de log4net, en el ejemplo del post no recordé agregarlo:


      private void RegisterLog()
      {
      log4net.Config.XmlConfigurator.Configure();
      }

      Gracias por la corrección! 🙂
      Abrazos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s