我们知道,在幕后,ASP.NET MVC 框架将使用反射来确定哪些控制器/动作可以执行,基于哪些类派生自System.Web.Mvc.Controller
这些类,以及这些类中哪些方法返回一个ActionResult
对象。
对于我的问题 - 是否可以从我的 MVC 应用程序中访问此控制器/操作列表?
(我可以自己做,通过对当前程序集使用反射,但如果列表已经由 ASP.NET MVC 构建,我宁愿重用这项工作,也不愿自己重新发明轮子。)
我们知道,在幕后,ASP.NET MVC 框架将使用反射来确定哪些控制器/动作可以执行,基于哪些类派生自System.Web.Mvc.Controller
这些类,以及这些类中哪些方法返回一个ActionResult
对象。
对于我的问题 - 是否可以从我的 MVC 应用程序中访问此控制器/操作列表?
(我可以自己做,通过对当前程序集使用反射,但如果列表已经由 ASP.NET MVC 构建,我宁愿重用这项工作,也不愿自己重新发明轮子。)
new ReflectedControllerDescriptor(typeof(TController)).GetCanonicalActions()
将返回 ActionDescriptor 对象的集合,显示控制器上的所有操作。理解诸如选择属性或命名属性之类的东西还不够聪明,因此不能保证它返回的每个操作都是可网络调用的。但如果您需要直接执行操作,您可以对您感兴趣的任何操作调用 ActionDescriptor.Execute()。
这是在程序集中的一个名为的internal
类中完成的。System.Web.Mvc
System.Web.Mvc.ControllerTypeCache
顺便说一句,操作方法不需要返回ActionResult
。例如,他们可以void
愉快地返回。