2009-04-26 75 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

相關問題