如何在WebAPI控制器中记录执行的操作方法

8
在WebAPI中,有没有一种方法可以使用操作过滤器记录被调用或执行的控制器的操作方法名称。我正在使用RouteData属性,如下所示,但是操作值不包含任何值。是否有任何方法可以在过滤器中获取操作名称。
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");
    }
}
1个回答

4

您可以在actionExecutedContext.ActionContext.ActionDescriptor.ActionName属性(字符串)中找到操作名称。

如果您需要更多的信息而不仅仅是字符串名称,您还可以将该ActionDescriptor转换为ReflectedHttpActionDescriptor并获取被调用的MethodInfo实例。

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

感谢您的回答,Filip。 - user2813261

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接