Asp.net Mvc:列出具有特定属性的控制器上的所有操作

Pic*_*els 9 sitemap asp.net-mvc

我试图列出所有控制器及其具有特定属性的操作,以创建动态的谷歌站点地图.这样我就可以使用属性"标记"某些操作,以便它们显示在站点地图中.

在这里,我发现了如何获得所有控制器.但我不确定如何使用特定属性获取所有动作.我尝试了GetMethods然后使用GetCustomAttributes,但我不确定这是否是正确的方法.感觉有点过于复杂.

一旦我得到控制器和他们的行动,我将使用这里解释的技术来获取网址.你可能会注意到Eric Duncan谈到了我在这个问题上想要完成的事情.

提前致谢.

tva*_*son 18

我在单元测试中使用了一些代码来验证某些操作是否使用属性进行修饰.它使用具有一些可枚举的扩展方法优点的反射.我想你可以适应这个.注意,如果您只关心它是否存在,则可以在枚举上使用Count()而不是获取实际属性.通过这种方式,您可以灵活地使用属性属性来自定义行为.使用继承树可以装饰整个控制器.

 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 ))
        {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)