我有一个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构造函数中的代码永远不会执行。有人可以告诉我为什么这不起作用或我能做些什么让它起作用?
另一方面,这是管理安全链接生成的一种不错的方式吗?还有更好的方法吗?
由于
戴夫
答案 0 :(得分:2)
这不是属性如何运作的。它们只是在编译时提供一些元数据。在运行时,某些代码可以使用Reflection来查找属性。那时,如果属性上有方法,那么你可以运行它来做某事。
答案 1 :(得分:0)
如果你要做的是根据用户安全性添加HTML链接,那么你应该把它作为HttpContext的扩展方法,它可以让你完全访问当前页面的所有属性,包括用户上下文。