1. ホーム
  2. c#

[解決済み] C#ですべてのコントローラとアクションの名前を取得する

2023-07-16 10:02:47

質問

すべてのコントローラの名前とアクションをプログラムで一覧表示することは可能ですか?

各コントローラとアクションに対して、データベース駆動型のセキュリティを実装したいと考えています。開発者としては、全てのコントローラとアクションを知っているので、データベースのテーブルに追加することは可能ですが、自動的に追加する方法はないでしょうか?

どのように解決するのですか?

リフレクションを使って現在のアセンブリにあるすべてのコントローラを見つけ、 それらのパブリックメソッドで NonAction 属性で装飾されていないパブリックメソッドを見つけることができます。

Assembly asm = Assembly.GetExecutingAssembly();

asm.GetTypes()
    .Where(type=> typeof(Controller).IsAssignableFrom(type)) //filter controllers
    .SelectMany(type => type.GetMethods())
    .Where(method => method.IsPublic && ! method.IsDefined(typeof(NonActionAttribute)));