Asp.net Mvc: List all the actions on a controller with specific attribute

谁说我不能喝 提交于 2019-11-30 19:24:43

I use some code in my unit tests to verify that certain actions are decorated with attributes. It uses reflection with some enumerable extension method goodness. I think you could adapt this. Note, if you only care about whether it exists or not, you could use Count() on the enumeration rather than getting the actual attribute. This way allows you some flexibility in using attribute properties to customize the behavior. Using the inheritance tree would allow you to decorate an entire controller.

 var methods= controller.GetType()
                        .GetMethods( BindingFlags.Public | BindingFlags.Instance )
 foreach (var info in methods)
 {
     if (info.ReturnType  == typeof(ActionResult))
     {
        var attribute = info.GetCustomAttributes( typeof( SiteMapAttribute ), true )
                            .Cast<SiteMapAttribute>()
                            .FirstOrDefault();

        if (attribute != null && !attribute.Exclude.Contains( info.Name ))
        {
            ...
        }
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!