9

System.Web.Mvc.Controllerバックグラウンドで、ASP.NET MVC フレームワークはリフレクションを使用して、どのクラスから派生したか、およびそれらのクラスのどのメソッドがオブジェクトを返すかに基づいて、どのコントローラー/アクションを実行できるかを判断しActionResultます。

私の質問に対して - MVC アプリケーション内からこのコントローラー/アクションのリストにアクセスすることは可能ですか?

(現在のアセンブリでリフレクションを使用して自分で行うこともできますが、リストが ASP.NET MVC によって既に構築されている場合は、自分で車輪を再発明するよりも、その努力を再利用したいと思います。)

4

2 に答える 2

15

new ReflectedControllerDescriptor(typeof(TController)).GetCanonicalActions()コントローラ上のすべてのアクションを示すActionDescriptorオブジェクトのコレクションを返します。選択属性や命名属性などを理解するのは賢明ではないため、返されるすべてのアクションがWeb呼び出し可能であることが保証されているわけではありません。ただし、アクションを直接実行する必要がある場合は、関心のあるアクションに対してActionDescriptor.Execute()を呼び出すことができます。

于 2009-04-27T01:35:11.510 に答える
6

これは、 というアセンブリ内のinternalクラスで行われます。System.Web.MvcSystem.Web.Mvc.ControllerTypeCache

ところで、アクション メソッドは を返す必要はありませんActionResult。たとえば、彼らはvoid幸せに戻ることができます。

于 2009-04-26T08:16:29.073 に答える