使用ActionExecutingContext對象可以獲取控制器名稱、Action名稱、參數名稱以及參數值。路由和Action返回值不影響結果。
在代碼中
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public class ViewLogAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); } }
1.獲取控制器名稱代碼
var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
或
var controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"];
2.獲取Action名稱代碼
var actionName = filterContext.ActionDescriptor.ActionName;
或
var actionName = HttpContext.Current.Request.RequestContext.RouteData.Values["Action"];
3.獲取Action參數名稱
//獲取參數數組 var arrParameter = filterContext.ActionDescriptor.GetParameters(); //根據索引獲取對應參數名 var paramName = arrParameter[0].ParameterName;
4.獲取參數值
var parameterValue = filterContext.Controller.ValueProvider.GetValue(paramName).RawValue;
如果可以確定參數名稱可以直接用ActionParameters通過Key來獲取,Key指參數名稱
var parameterValue = filterContext.ActionParameters["KeyName"];