Asp.net web api 如何在webapi中记录控制器中执行的操作方法
在WebAPI中,是否仍要记录使用动作过滤器调用或执行的控制器的动作方法的名称。我使用RouteData属性,如下所示,但action值不包含任何值。是否有任何方法可以在筛选器中获取操作名称Asp.net web api 如何在webapi中记录控制器中执行的操作方法,asp.net-web-api,Asp.net Web Api,在WebAPI中,是否仍要记录使用动作过滤器调用或执行的控制器的动作方法的名称。我使用RouteData属性,如下所示,但action值不包含任何值。是否有任何方法可以在筛选器中获取操作名称 public class LogActionFilter : ActionFilterAttribute { public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) {
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");
}
}
您可以在
ActionExecuteContext.ActionContext.ActionDescriptor.ActionName
属性(字符串)中找到操作名称
您还可以将该ActionDescriptor
强制转换为ReflectedHttpActionDescriptor
,并获取调用的MethodInfo
的实例,如果您需要的信息不仅仅是字符串名
var reflectedActionDescriptor = actionExecutedContext.ActionContext.ActionDescriptor
as ReflectedHttpActionDescriptor;
//inspect reflectedActionDescriptor.MethodInfo here
谢谢你的回答,菲利普。