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

问题描述:

我想列出所有控制器及其具有特定属性的操作,以创建动态Google站点地图。这样我就可以用属性“标记”某些动作,以便它们显示在站点地图中。Asp.net Mvc:列出具有特定属性的控制器上的所有操作

Here我发现如何获得所有的控制器。但我不确定如何使用特定属性获取所有操作。我试过GetMethods,然后使用GetCustomAttributes,但我不确定这是否正确。这感觉有点过于复杂。

一旦我得到控制器和他们的行动,我将使用解释here的技术来获取网址。正如你可能注意到埃里克邓肯谈论我在这个问题上想要完成的事情。

在此先感谢。

我在我的单元测试中使用了一些代码来验证某些动作是用属性装饰的。它使用反射与一些枚举扩展方法善良。我想你可以适应这一点。请注意,如果您只关心它是否存在,则可以在枚举上使用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)) 
     { 
      ... 
     } 
    } 
}