将C#属性应用于扩展方法以管理扩展方法执行,如操作过滤器

时间:2010-02-26 00:16:45

标签: c# asp.net-mvc attributes extension-methods

我有一个HtmlHelper扩展方法,我想在执行之前应用一些逻辑。我想我正在寻找类似于Action Filters的行为,我认为我可以通过将Attribute应用于方法而不需要Filter Context来实现这一点。

这是我的扩展方法:

[MyHelperAttribute]
public static string MyHelperMethod(this HtmlHelper html, string text)
{
    TagBuilder tag = new TagBuilder("a");

    return tag.ToString();
}

这是属性的定义:

[AttributeUsage(AttributeTargets.Method)]
public class MyHelperAttribute: Attribute
{        
    public MyHelperAttribute()
    {
        // get user 
        // if user has permission, execute extension method
        // else return empty string
    }
}

问题在于它没有开火。 MyHelperAttribute构造函数中的代码永远不会执行。有人可以告诉我为什么这不起作用或我能做些什么让它起作用?

另一方面,这是管理安全链接生成的一种不错的方式吗?还有更好的方法吗?

由于

戴夫

2 个答案:

答案 0 :(得分:2)

这不是属性如何运作的。它们只是在编译时提供一些元数据。在运行时,某些代码可以使用Reflection来查找属性。那时,如果属性上有方法,那么你可以运行它来做某事。

答案 1 :(得分:0)

如果你要做的是根据用户安全性添加HTML链接,那么你应该把它作为HttpContext的扩展方法,它可以让你完全访问当前页面的所有属性,包括用户上下文。

相关问题