MVC3如果用属性[ActionName("")]改变名字,如何得到其函数名称
MVC3如果用属性[ActionName("")]改变名字,如何得到其函数名称
如:
[ActionName("Row")]
public ActionResult GetRow(string id)
{
....
return View("Index");
}
如何在过滤器中获得GetRow这个函数名:
public class LoggerFilter : FilterAttribute, IActionFilter
{
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
这里。。。
}
}
[解决办法]
VS11/C# 4.5就有更直接的办法了
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext, [CallerMemberName] string memberName = "")
{
memberName就是调用者
}
[解决办法]
在框架内actiondescriptor有两个不是抽象的派生类,actiondescriptor的实例只可能是其中的一个.
- C# code
public void OnActionExecuting(ActionExecutingContext filterContext) { var descriptor = filterContext.ActionDescriptor; if (descriptor is ReflectedActionDescriptor) { var concreteDescriptor = descriptor as ReflectedActionDescriptor; var methodName = concreteDescriptor.MethodInfo.Name; throw new Exception(methodName); } else if (descriptor is ReflectedAsyncActionDescriptor) { var concreteDescriptor = descriptor as ReflectedAsyncActionDescriptor; var methodName = concreteDescriptor.AsyncMethodInfo.Name; throw new Exception(methodName); } }