No puedo recordar donde me dieron esto desde, pero yo estaba mirando a su alrededor para algo similar hace un tiempo y encontró una artículo o algo en alguna parte que contenía el registro de este filtro:
public class LogActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Log("OnActionExecuting", filterContext.RouteData);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
Log("OnActionExecuted", filterContext.RouteData);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
Log("OnResultExecuting", filterContext.RouteData);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
Log("OnResultExecuted", filterContext.RouteData);
}
private void Log(string methodName, RouteData routeData)
{
var controllerName = routeData.Values["controller"];
var actionName = routeData.Values["action"];
var message = string.Format("{0} controller: {1} action: {2}", methodName, controllerName, actionName);
Debug.WriteLine(message, "Action Filter Log");
}
}
para usarlo, basta con añadir a los filtros globales en global.asax:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new LogActionFilter());
}
Echaré un vistazo ahora para ver si puedo encontrar la fuente.
Editar: Lo encontró. Era de this question.
PS también puede usar algún método de programación orientada a aspectos (AOP) e inyectar a través de postsharp o spring.net tiene un motor que puede usar para interceptar llamadas también (que va más allá del controlador, pero puede establecer una expresión regular en el archivo de configuración para aplicar, creo, a clases con un nombre 'Controlador' en ellas). –