2009-04-26 31 views
9

我们知道,在幕后,ASP.NET MVC框架将使用反射来确定可以执行哪些控制器/操作,具体取决于哪些类派生从System.Web.Mvc.Controller和那些类中,哪些方法返回一个ActionResult对象。访问ASP.NET MVC应用程序中的控制器/操作列表

我的问题是否有可能从我的MVC应用程序中访问此控制器/操作列表?我可以自己做,通过使用当前程序集的反射,但是如果列表已经由ASP.NET MVC构建,我宁愿重复使用那个努力,而不是重新发明轮子。 )

回答

15

new ReflectedControllerDescriptor(typeof(TController)).GetCanonicalActions()将返回显示控制器上所有操作的ActionDescriptor对象的集合。理解诸如选择属性或命名属性之类的东西并不够智慧,因此并不是每一个它返回的动作都能够被网络调用。但是,如果您需要直接执行操作,则可以针对您感兴趣的任何操作调用ActionDescriptor.Execute()。

6

这是在名为System.Web.Mvc.ControllerTypeCacheSystem.Web.Mvc组件中的internal类中完成的。

顺便说一下,操作方法不需要返回ActionResult。例如,他们可以愉快地返回void

+0

可能值得澄清然后在控制器上构成一个动作。控制器上的任何公开方法都可以看作是我相信的一种行为。 – AnthonyWJones 2009-04-26 08:24:50

相关问题