如何从ActionExecutingContext获取MethodInfo?

时间:2009-12-29 00:06:38

标签: asp.net-mvc

如果我有一个ActionExecutingContext的实例,我怎么能得到它的MethodInfo 有问题的行动?

3 个答案:

答案 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等。