Actuellement, j'essaie d'identifier quelles classes "Controller" dans mon assembly ont l'attribut [Authorize] qui leur est associé en utilisant Reflection et LINQ.Utilisation de LINQ et de Reflection: Comment interroger toutes les classes avec l'attribut [Authorize] dans mon assembly?
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();
Ce code fonctionne presque. Si je trace pas à pas l'instruction LINQ étape par étape, je peux voir que lorsque je "mouseover" la variable de plage "attribs" que je définis dans l'instruction LINQ est remplie avec un seul attribut et cet attribut arrive à être de type AuthorizeAttribute. Il semble un peu comme ceci:
[-] attribs | {object[1]}
[+] [0] | {System.Web.Mvc.AuthorizeAttribute}
De toute évidence, cette ligne dans ma déclaration LINQ est erroné:
where attribs.Contains("Authorize")
Que dois-je écrire là au lieu de détecter si « attribs » contient le type AuthorizeAttribute ou non ?
Riiiight. La méthode "Any". Je savais que "Contient" était faux (parce que Intellisense ne me permettait pas d'écrire une expression lambda, mais je ne pouvais pas savoir quelle méthode choisir dans la liste ...) - Merci, mec. Je savais que c'était un problème simple que quelqu'un pourrait signaler immédiatement. – Pretzel
@Pretzel pas de problème – luke