現在、リフレクションとLINQを使用して、アセンブリ内のどの「コントローラー」クラスに[Authorize]属性が関連付けられているかを特定しようとしています。
const bool allInherited = true;
var myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
var controllerList = from type in myAssembly.GetTypes()
where type.Name.Contains("Controller")
where !type.IsAbstract
let attribs = type.GetCustomAttributes(allInherited)
where attribs.Contains("Authorize")
select type;
controllerList.ToList();
このコードはほとんど機能します。
LINQ ステートメントを段階的にトレースすると、LINQ ステートメントで定義した「attribs」範囲変数を「マウスオーバー」すると、単一の属性が取り込まれ、その属性がたまたま AuthorizeAttribute 型であることがわかります。 . 次のようになります。
[-] attribs | {object[1]}
[+] [0] | {System.Web.Mvc.AuthorizeAttribute}
明らかに、LINQ ステートメントの次の行は間違っています。
where attribs.Contains("Authorize")
「attribs」に AuthorizeAttribute タイプが含まれているかどうかを検出するには、代わりに何を書く必要がありますか?