【问题标题】:Accessing the list of Controllers/Actions in an ASP.NET MVC application访问 ASP.NET MVC 应用程序中的控制器/操作列表
【发布时间】:2009-04-26 08:05:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net-mvc reflection controller action


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这是在名为 System.Web.Mvc.ControllerTypeCacheSystem.Web.Mvc 程序集中的 internal 类中完成的。

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

      【讨论】:

      • 可能值得澄清一下什么构成了控制器上的操作。控制器上的任何公共方法都可以视为我认为的操作。
      • 是的。当然,除非明确声明为[NonAction]
      猜你喜欢
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      相关资源
      最近更新 更多