目前,我试图找出我的组件,其“控制器”类别与他们使用反射和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语句一步一步追溯,我可以看到,当I“鼠标悬停”该“attribs”范围我在LINQ语句限定可变填充了一个单属性和属性恰好是类型的AuthorizeAttribute 。 它看起来有点像这样:
[-] attribs | {object[1]}
[+] [0] | {System.Web.Mvc.AuthorizeAttribute}
很显然,这条线在我的LINQ说法是错误的:
where attribs.Contains("Authorize")
我应该怎么写,而不是有检测是否“attribs”包含AuthorizeAttribute类型或不?