Применить атрибут C # к методу расширения, чтобы управлять выполнением метода расширения как фильтр действий - PullRequest
2 голосов
/ 26 февраля 2010

У меня есть метод расширения HtmlHelper, к которому я хотел бы применить некоторую логику перед выполнением. Я полагаю, что я ищу поведение, похожее на Action Filters, но я думал, что смогу сделать это, применив атрибут к методу без необходимости контекста фильтра.

Это мой метод расширения:

[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 никогда не выполняется. Может кто-нибудь сказать мне, почему это не работает или что я могу сделать, чтобы заставить его работать?

Кстати, это достойный способ управления генерацией защищенных ссылок? Есть ли лучший способ?

Спасибо

Dave

Ответы [ 2 ]

2 голосов
/ 26 февраля 2010

Это не так, как работают атрибуты. Они просто предоставляют некоторые метаданные во время компиляции. Во время выполнения некоторый код может использовать Reflection для поиска атрибута. В то время, если в атрибуте был метод, возможно, вы могли бы запустить его, чтобы что-то сделать.

0 голосов
/ 26 февраля 2010

Если то, что вы пытаетесь сделать, это добавить ссылку на HTML на основе безопасности пользователя, то вам, вероятно, следует сделать его методом расширения HttpContext, который дает вам полный доступ ко всем атрибутам текущей страницы, включая Пользовательский контекст.

...