9

我们知道,在幕后,ASP.NET MVC 框架将使用反射来确定哪些控制器/动作可以执行,基于哪些类派生自System.Web.Mvc.Controller这些类,以及这些类中哪些方法返回一个ActionResult对象。

对于我的问题 - 是否可以从我的 MVC 应用程序中访问此控制器/操作列表?

(我可以自己做,通过对当前程序集使用反射,但如果列表已经由 ASP.NET MVC 构建,我宁愿重用这项工作,也不愿自己重新发明轮子。)

4

2 回答 2

15

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

于 2009-04-27T01:35:11.510 回答
6

这是在程序集中的一个名为的internal类中完成的。System.Web.MvcSystem.Web.Mvc.ControllerTypeCache

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

于 2009-04-26T08:16:29.073 回答