访问ASP.NET MVC应用程序中的控制器/操作列表

Jon*_*han 9 reflection asp.net-mvc action controller

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

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

(我可以通过在当前程序集上使用反射来自己完成,但如果列表已经由ASP.NET MVC构建,我宁愿重新使用这些工作,而不是自己重新发明轮子.)

Lev*_*evi 15

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


Meh*_*ari 6

这是在做internal类的System.Web.Mvc所谓的组装System.Web.Mvc.ControllerTypeCache.

顺便说一句,行动方法不需要返回ActionResult.void例如,他们可以愉快地回来.