如何在asp.net core rc2中获取控制器的自定义属性

时间:2016-05-26 15:41:36

标签: c# asp.net asp.net-core asp.net-core-mvc

我创建了一个自定义属性:

[AttributeUsage(AttributeTargets.Method| AttributeTargets.Class)]
public class ActionAttribute : ActionFilterAttribute
{
    public int Id { get; set; }
    public string Work { get; set; }
}

我的控制员:

[Area("Administrator")]
[Action(Id = 100, Work = "Test")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

我的代码:我使用反射来查找当前程序集中的所有控制器

 Assembly.GetEntryAssembly()
         .GetTypes()
         .AsEnumerable()
         .Where(type => typeof(Controller).IsAssignableFrom(type))
         .ToList()
         .ForEach(d =>
         {
             // how to get ActionAttribute ?
         });

是否可以实用地阅读所有ActionAttribute

1 个答案:

答案 0 :(得分:15)

要从课程中获取属性,您可以执行以下操作:

typeof(youClass).GetCustomAttributes<YourAttribute>();
// or
// if you need only one attribute
typeof(youClass).GetCustomAttribute<YourAttribute>();

它将返回IEnumerable<YourAttribute>

因此,在您的代码中,它将类似于:

Assembly.GetEntryAssembly()
        .GetTypes()
        .AsEnumerable()
        .Where(type => typeof(Controller).IsAssignableFrom(type))
        .ToList()
        .ForEach(d =>
        {
            var yourAttributes = d.GetCustomAttributes<YourAttribute>();
            // do the stuff
        });

修改

对于CoreCLR,您需要再调用一个方法,因为API已经改变了一点:

typeof(youClass).GetTypeInfo().GetCustomAttributes<YourAttribute>();