【问题标题】:How to log which action method is executed in a controller in webapi如何记录在 webapi 的控制器中执行的操作方法
【发布时间】:2014-12-18 20:06:27
【问题描述】:

在 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");
    }
}

【问题讨论】:

    标签: asp.net-web-api


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢菲利普的回答。
    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 2011-02-07
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多