我們知道,在幕後,ASP.NET MVC框架將使用反射來確定可以執行哪些控制器/操作,具體取決於哪些類派生從System.Web.Mvc.Controller
和那些類中,哪些方法返回一個ActionResult
對象。訪問ASP.NET MVC應用程序中的控制器/操作列表
我的問題是否有可能從我的MVC應用程序中訪問此控制器/操作列表?我可以自己做,通過使用當前程序集的反射,但是如果列表已經由ASP.NET MVC構建,我寧願重複使用那個努力,而不是重新發明輪子。 )
我們知道,在幕後,ASP.NET MVC框架將使用反射來確定可以執行哪些控制器/操作,具體取決於哪些類派生從System.Web.Mvc.Controller
和那些類中,哪些方法返回一個ActionResult
對象。訪問ASP.NET MVC應用程序中的控制器/操作列表
我的問題是否有可能從我的MVC應用程序中訪問此控制器/操作列表?我可以自己做,通過使用當前程序集的反射,但是如果列表已經由ASP.NET MVC構建,我寧願重複使用那個努力,而不是重新發明輪子。 )
new ReflectedControllerDescriptor(typeof(TController)).GetCanonicalActions()
將返回顯示控制器上所有操作的ActionDescriptor對象的集合。理解諸如選擇屬性或命名屬性之類的東西並不夠智慧,因此並不是每一個它返回的動作都能夠被網絡調用。但是,如果您需要直接執行操作,則可以針對您感興趣的任何操作調用ActionDescriptor.Execute()。
這是在名爲System.Web.Mvc.ControllerTypeCache
的System.Web.Mvc
組件中的internal
類中完成的。
順便說一下,操作方法不需要返回ActionResult
。例如,他們可以愉快地返回void
。
可能值得澄清然後在控制器上構成一個動作。控制器上的任何公開方法都可以看作是我相信的一種行爲。 – AnthonyWJones 2009-04-26 08:24:50