如果我有一个ActionExecutingContext的实例,我怎么能得到它的MethodInfo 有问题的行动?
答案 0 :(得分:11)
ActionExecutingContext有一个属性ActionDescriptor。
如果,返回类型实际上是一个ReflectedActionDescriptor,你应该能够这样抛出。一旦你有了ReflectedActionDescriptor ......
http://msdn.microsoft.com/en-us/library/system.web.mvc.reflectedactiondescriptor.aspx
...你可以使用它的MethodInfo属性......
http://msdn.microsoft.com/en-us/library/system.web.mvc.reflectedactiondescriptor.methodinfo.aspx
您应该小心使用采取操作名称的技术并使用它来获取MethodInfo。在许多情况下,操作的名称将与控制器上的方法名称相同,但情况并非总是如此。如果在控制器的方法上使用ActionName属性,则可以显式设置操作的名称。此外,可以使用具有不同签名的两种方法,两种方法具有相同的操作名称。当您拥有相同操作的GET和POST版本时(例如,AccountController.cs中全新的ASP.NET MVC项目中存在Register和LogOn操作),这很常见。
答案 1 :(得分:1)
尝试Controller.GetType.GetMethod(actionExecutingContext.ActionName)
。
如果您的代码直接在操作中,您也可以拨打MethodBase.GetCurrentMethod()
。
答案 2 :(得分:1)
我需要让MethodInfo
获取我的自定义属性以用于某些日志记录目的。
对于这个特定用例,我注意到(至少在MVC5中)存在ActionDescriptor.GetCustomAttributes
方法,并且为每个ActionDescroptor
后代正确覆盖了它。
同样,还有其他相关方法,如GetParameters
等。