2014-10-23 7 views
6

In WebAPI, è comunque necessario registrare il nome del metodo di azione per un controller che viene chiamato o eseguito utilizzando un filtro di azione. Sto usando la proprietà RouteData come mostrato di seguito, ma il valore dell'azione non contiene alcun valore. C'è un modo per ottenere il nome dell'azione nel filtro.Come registrare quale metodo di azione viene eseguito in un controller in webapi

public class LogActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
     Log(actionExecutedContext.ActionContext.RequestContext.RouteData); 

     base.OnActionExecuted(actionExecutedContext); 
    } 

    private void Log(System.Web.Http.Routing.IHttpRouteData httpRouteData) 
    { 
     var controllerName = httpRouteData.Values["controller"]; 

     var actionName = httpRouteData.Values["action"]; 

     var message = String.Format("controller:{0}, action:{1}", controllerName, actionName); 

     Debug.WriteLine(message, "Action Filter Log"); 
    } 
} 

risposta

2

È possibile trovare il nome dell'azione nel actionExecutedContext.ActionContext.ActionDescriptor.ActionName proprietà (stringa).

È anche possibile lanciare quella ActionDescriptor a ReflectedHttpActionDescriptor e ottenere un'istanza del MethodInfo che si chiamava, se avete bisogno di ulteriori informazioni di un semplice nome di stringa.

var reflectedActionDescriptor = actionExecutedContext.ActionContext.ActionDescriptor 
     as ReflectedHttpActionDescriptor; 
//inspect reflectedActionDescriptor.MethodInfo here 
+0

Grazie per aver risposto, Filip. – user2813261

Problemi correlati