non mi ricordo dove ho ricevuto questo da, ma mi è stato guardando intorno per qualcosa di simile un po 'indietro e ha trovato un articolo o qualcosa da qualche parte che conteneva questo filtro di registrazione:
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");
}
}
per usarlo, basta aggiungerlo ai filtri globali in global.asax:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new LogActionFilter());
}
Ora avrò uno sguardo per vedere se riesco a trovare la fonte.
Modifica: Trovato. Era dal this question.
fonte
2012-02-21 19:36:54
PS si può anche utilizzare un metodo di programmazione orientata agli aspetti (AOP) e iniettare tramite postsharp o spring.net ha un motore che puoi usare per intercettare anche le chiamate (che va oltre il controller ma puoi impostare una regex nel file di configurazione per applicare credo nelle classi con un nome "Controller" su di esse. –