【问题标题】:Asp.net Mvc: List all the actions on a controller with specific attributeAsp.net Mvc:列出具有特定属性的控制器上的所有操作
【发布时间】:2009-09-01 00:26:16
【问题描述】:

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

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

一旦我得到控制器和他们的动作,我将使用here 解释的技术来获取网址。正如您可能注意到的那样,Eric Duncan 谈到了我在该问题中想要实现的目标。

提前致谢。

【问题讨论】:

    标签: asp.net-mvc sitemap


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      相关资源
      最近更新 更多