我有一個HtmlHelper擴展方法,我想在執行之前應用一些邏輯。我想我正在尋找類似於動作過濾器的行爲,我認爲我可以通過將屬性應用於方法而不需要過濾器上下文來實現。將C#屬性應用到擴展方法來管理擴展方法執行,如動作過濾器
這是我的擴展方法:
[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構造函數中的代碼從不執行。有人可以告訴我爲什麼這不起作用,或者我可以做些什麼來使它起作用?
請注意,這是一個體面的方式來管理安全鏈接的生成?有沒有更好的辦法?
感謝
戴夫
但行動過濾器不是一個屬性相同? Action Filter提供了運行時功能,不是嗎?我的印象是屬性爲方法的執行提供了輔助功能,而不僅僅是元數據。 – DaveDev
@Dave,ASP.NET MVC中實際上有另一個對象(ControllerActionInvoker類),它在調用它之前獲取一個動作的屬性。因此,只要將屬性修飾爲方法,它就不會自動發生。像約翰說的那樣,屬性只是提供一些元數據。 –
@Dave:從1.0版開始,.NET中的屬性一直在.NET中。動作過濾器是新的。 –