2009-07-24 9 views
5

Possible en double:
Why does my .NET Attribute not perform an action?C# d'exécuter du code à l'intérieur attribut personnalisé

Salut,

Cela peut soundlike une question très stupide et je ne sais pas ce qui est possible ici tous Les tutoriels "attribut personnalisé" sur le net sont à peu près les mêmes et ils ne répondent pas à ce que je veux faire. J'ai vu du code là-bas où le code est écrit à l'intérieur des classes d'attributs, par exemple: Logging with ASP.NET MVC Action Filters et je me demande comment ce code est jamais exécuté.

Si je par exemple le code suivant:

public class Test 
{ 
    [RestrictedAttribute("RegisteredMember")] 
    public void DoSomething() 
    { 
     //this code can only be executed if the logged-in user 
     //is a member of the RegisteredMember group 
    } 
} 

Ensuite, l'attribut personnalisé RestrictedAttribute serait quelque chose comme ceci:

[AttributeUsage(AttributeTargets.Method)] 
public class RestrictedAttribute : System.Attribute 
{ 
    /// <summary> 
    /// Make this code restricted to users with a required role 
    /// </summary> 
    /// <param name="requiredRole">The role required to execute this method</param> 
    public RestrictedAttribute(string requiredRole) 
    { 
     //validate if member is in role, else throw exception 
     throw new MemberNotInRoleException(requiredRole); 
    } 
    public new string ToString() { 
     return "Access needs to be granted"; 
    } 

} 

Maintenant, le problème est que je ne peux pas obtenir le MemberNotInRoleException être lancé lorsque j'exécute la méthode Test.DoSomething().

Peut-être que je manque tout le concept des attributs personnalisés, n'hésitez pas à expliquer.

+0

Dupe: http://stackoverflow.com/questions/1164978/c-attribute-actions-and-instance-values ​​ –

+2

Vous devez hériter de votre attribut à partir de ActionFilterAttribute et remplacer la méthode OnActionExecuting pour l'amener à faire quelque chose dans MVC . –

+1

Je ne pense pas que ce soit une dupe exacte, comme c'est le comportement MCV qui obscurcit le problème, la référence de Mehrdad adresse les attributs directement et est un bon appel, mais il y a une nuance ici qui peut aider les gens de MVC préoccupations dans leurs solutions, telles que la validation, et la sérialisation JSON/XML. –

Répondre

2

La façon dont vous regardez les attributs semble correcte au premier abord, mais détrompez-vous. Ce que vous faites vraiment, c'est décorer votre classe ou quoi que ce soit pour que quelque chose qui fonctionne avec elle puisse prendre une décision, pas pour que la classe elle-même puisse prendre une décision. Cela a été obscurci pour moi par la façon dont vous pouvez utiliser les attributs actionfilter dans MVC, qui semblent faire quelque chose, mais c'est le framework qui sélectionne les événements et utilise l'attribut en conséquence. J'essaie habituellement de penser aux attributs comme des commentaires pour mon programme de travail.

Questions connexes