[ASP.NET Web API] Web API V – Filtros de acción

Posted on Actualizado enn


Hola a todos, de nuevo con otro post de la serie de ASP.NET Web API, esta vez vamos a revisar como podemos crear filtros de acción los cuales nos permiten ejecutar código antes y después de la ejecución de un acción en determinado controlador.

Para crear un filtro de acción, se debe crear una clase que herede de ActionFilterAttribute, y sobrescribir las funciones OnActionExecuting (ejecutada antes de la acción del controlador) y/o OnActionExecuted (ejecutada una vez la acción del controlador ha finalizado).

Para mostrar su uso, la idea es crear un filtro que permita tener un log de  las ejecuciones de la ejecuciones de las acciones en PersonController, pero antes de crear el filtro crearemos una clase singleton que se encargará de hacer el log, asi que primero definimos una sencilla interfaz:

interface ILogWriter
{
	void Log(string message);
}

Luego la clase que implementa dicha interfaz:

public class LogWriter : ILogWriter
{
	private static readonly Lazy instance = new Lazy(() => new LogWriter());

	private LogWriter() { }

	public static LogWriter Instance
	{
		get
		{
			return instance.Value;
		}
	}

	public void Log(string message)
	{
		Debug.WriteLine(message);
	}
}

Ahora que ya tenemos lista la clase, creamos una clase llamada LogFilterAttribute la cual debe heredar de ActionFilterAttribute y sobrescribimos los métodos nombrados anteriormente:

public class LogFilterAttribute : ActionFilterAttribute
{
	public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
	{
		//Get info using actionContext
		LogWriter.Instance.Log("Executed before at: " + System.DateTime.Now);
	}

	public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
	{
		//Get info using actionContext
		LogWriter.Instance.Log("Executed after at: " + System.DateTime.Now);
	}
}

En este caso solo enviamos una simple cadena de texto, pero es posible obtener información del request utilizando el objeto actionContext.

Por último, para que el filtro creado funcione, lo que hacemos es decorar el controlador Person con el atributo creado:

[LogFilter]
public class PersonController : ApiController
{
	...
}

Espero el post les sea de utilidad, nos vemos en el siguiente artículo de Web API!

Saludos!

Descarga el ejemplo!

Un comentario sobre “[ASP.NET Web API] Web API V – Filtros de acción

    […] [ASP.NET Web API] Web API V – Filtros de acción […]

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