В настоящее время я пытаюсь определить, какие классы «Controller» в моей сборке имеют атрибут [Authorize], связанный с ними, с помощью Reflection и LINQ.
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, я вижу, что при "наведении мыши" переменная диапазона attribs, которую я определяю в операторе LINQ, заполняется одним атрибутом, и этот атрибут оказывается типа AuthorizeAttribute. Это выглядит примерно так:
[-] attribs | {object[1]}
[+] [0] | {System.Web.Mvc.AuthorizeAttribute}
Очевидно, что эта строка в моем утверждении LINQ неверна:
where attribs.Contains("Authorize")
Что мне вместо этого написать, чтобы определить, содержит ли attribs тип AuthorizeAttribute или нет?