Quelle est la différence entre les attributs et les filtres dans MVC
Maintenant, puis-je s'il vous plaît obtenir une comparaison non seulement une définition.
Exemple:
SomeClassAttribute (or ISomeClassAttribute)
VS
SomeClassFilter (or ISomeClassFilter)
J'ai le sentiment qu'ils peuvent être utilisés de la même façon mais de manière générale, "un attribut est appliqué" et un "filtre est la fonctionnalité qu'ils produisent." J'ai donc pu "ajouter un attribut à une méthode (ou classe ou autre) pour appliquer un filtre.
source d'informationauteur S.A.
Vous devez vous connecter pour publier un commentaire.
Vous l'avez dans cette phrase là. Filtres et Attributs ne sont pas exactement comparables concepts, ils répondent à deux fonctions différentes.
Je crois Filtrage MVC est très bien traité dans ce Article MSDN.
Attributs (au moins ceux qui s'appliquent à l'filtres) marque ce que le filtre est appliqué, c'est à dire une méthode d'action ou d'un contrôleur. Un exemple serait la
Authorize
attribut. Cet attribut correspond à une AuthorizationFilter qui implémente l'IAuthorizationFilter
interface. L'application de laAuthorize
attribut à une méthode d'action dit MVC pour autoriser une demande de ciblage que la méthode d'action, en l'appliquant à un contrôleur indique MVC pour autoriser toute demande de ciblage d'une méthode d'action du contrôleur, ou l'autorisation peut également être appliqué dans le monde entier pour toutes les demandes. Maintenant je l'ai dit avant, au moins celles qui s'appliquent pour les filtres, car Attributs sont un concept et de la syntaxe .NET, et pas seulement MVC. Il y a des attributs pour beaucoup d'autres choses et sont généralement à fournir des informations supplémentaires sur la propriété, la méthode, classe, ils sont appliqués pour.Attributs sont une caractéristique de .NET, MVC mise en œuvre des Filtres à l'aide de la fonctionnalité.
Par exemple, Système.Web.Mvc.HandleErrorAttribute dérive de la BCL Système.Attribut. Les filtres s'appliquent comportement via des crochets dans le MVC pipeline (grosso modo).
Dans la plupart des cas, les attributs sont utilisés pour décrire les métadonnées sur les méthodes/classes/etc. Par exemple, il y a l'attribut Serializable pour indiquer qu'une classe peut être sérialisé, TestClass attribut à marquer d'une classe de test, et Obsolète de l'attribut à marquer quelque chose comme obsolète. La réflexion est utilisé pour extraire cette information par un processus qui veut les utiliser. C'est bien dans ce question sur les attributs.
Les attributs de filtre en MVC, comme AuthorizeAttributetransmet des informations supplémentaires similaires à d'autres attributs -- une méthode de contrôleur ou de classe décorée par AuthorizeAttribute indique que l'autorisation est requise lorsqu'il est utilisé par MVC. Mais à la différence de certains autres attributs, les attributs de filtre eux-mêmes contenir la logique pour mener à bien la fonction réelle -- le AuthorizeAttribute dérive de Attribut (via FilterAttribute) et aussi implémente IAuthorizationFilter. Si MVC trouve un contrôleur de classe décorée par AuthorizeAttribute, il va appeler AuthorizeAttribute.OnAuthorization() méthode pour l'autorisation. Aussi, lorsque vous spécifiez des filtres globaux, vous ajoutez l'attribut de la classe elle-même à la liste des filtres, ce qui peut être un peu déroutant, mais c'est la façon dont il fonctionne: