在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");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在属性(字符串)中找到操作名称actionExecutedContext.ActionContext.ActionDescriptor.ActionName。
如果您需要的信息不仅仅是字符串名称,您还可以将其转换ActionDescriptor为ReflectedHttpActionDescriptor并获取被调用的实例。MethodInfo
var reflectedActionDescriptor = actionExecutedContext.ActionContext.ActionDescriptor
as ReflectedHttpActionDescriptor;
//inspect reflectedActionDescriptor.MethodInfo here
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3628 次 |
| 最近记录: |