这是我的设置,我在解决方案上有三个项目: 项目A:MVC的类库 项目B:MVC网站(主要) 项目C:MVC网站(仅限地区)
C作为区域部署在B上,并且工作得非常好。 B引用A和C. C引用A。
在类库A中,我定义了以下属性(删除了错误检查):
[AttributeUsage(AttributeTargets.Method)]
public class MyAttribute : Attribute {
public string Name = "";
public MyAttribute(string s)
{
Name = s;
}
}
然后在项目C中(与项目B中相同)我有一些类,其中一些方法使用我的自定义属性进行修饰:
public class SomeController : Controller, ISomethingSpecial
{
[MyAttribute("test")]
public ActionResult Index() {
return View();
}
}
自定义属性应用于操作方法,如属性使用约束所示。
为了测试,我把这段代码放在控制器的一个动作方法中:
IEnumerable<System.Type> all =
System.Web.Compilation.BuildManager.GetReferencedAssemblies().Cast<System.Reflection.Assembly>().SelectMany(a => a.GetTypes()).Where(type => typeof(ISomethingSpecial).IsAssignableFrom(type)).ToList();
foreach (Type t in all) {
if (!t.Equals(typeof(ISomethingSpecial))) {
MyAttribute[] sea = (MyAttribute[])Attribute.GetCustomAttributes(t, typeof(MyAttribute));
}
}
当我调试代码时,我进入迭代,其中检查类型 t 是 SomeController ,其中有一些方法用我的自定义属性修饰。但是我看到返回的GetCustomAttributes列表中有零元素!
在有人询问我基本上想要实现的是获取实现 ISomethingSpecial 接口的Web应用程序的程序集列表之前,我想要从候选列表中提取方法的名称(使用我的自定义属性 MyAttribute 。
修饰的MVC操作方法答案 0 :(得分:0)
您在方法上定义的属性不在类上。但是在您的代码中,您需要从类中请求自定义属性。如果需要从方法中获取属性,则应使用
迭代每个方法Type.GetMethods
https://msdn.microsoft.com/en-us/library/4d848zkb(v=vs.110).aspx
并为每个方法请求自定义属性,就像您现在为您的类一样。