Quelle est la différence entre les atsortingbuts et les filtres dans MVC

Maintenant, puis-je obtenir une comparaison et pas seulement une définition?

Exemple:

SomeClassAtsortingbute (or ISomeClassAtsortingbute) 

CONTRE

 SomeClassFilter (or ISomeClassFilter) 

J’ai l’impression qu’ils peuvent être utilisés de la même manière, mais en général, “un atsortingbut est appliqué” et un “filtre est la fonctionnalité qu’ils produisent”. Je pourrais donc “append un atsortingbut à une méthode (ou une classe ou quoi que ce soit) pour appliquer un filtre.

“Je pourrais donc” append un atsortingbut à une méthode (ou une classe ou quoi que ce soit) pour appliquer un filtre. “

Vous l’avez dans cette phrase juste là. Les filtres et les atsortingbuts ne sont pas des concepts comparables, ils remplissent deux fonctions différentes.

Je crois que le filtrage dans MVC est très bien traité dans cet article MSDN .

Les atsortingbuts (du moins ceux qui s’appliquent aux filtres) indiquent à quoi le filtre est appliqué, à savoir une méthode d’action ou un contrôleur. Un exemple serait l’atsortingbut Authorize . Cet atsortingbut correspond à un AuthorizationFilter qui implémente l’interface IAuthorizationFilter . L’application de l’atsortingbut Authorize à une méthode d’action indique à MVC d’autoriser une requête ciblant cette méthode d’action. L’application à un contrôleur indique à MVC d’autoriser toute requête ciblant une méthode d’action du contrôleur. Une autorisation peut également être appliquée globalement à toutes les requêtes. Maintenant, je l’ai déjà dit, du moins ceux qui s’appliquent aux filtres, car les atsortingbuts sont un concept et une syntaxe de .NET et pas seulement de MVC. Il existe des atsortingbuts pour de nombreuses autres choses et sont généralement destinés à fournir des informations supplémentaires sur la propriété, la méthode, la classe à laquelle ils sont appliqués.

Les atsortingbuts sont une fonctionnalité de .NET, les filtres MVC sont implémentés à l’aide de cette fonctionnalité.

Par exemple, System.Web.Mvc.HandleErrorAtsortingbute est dérivé de BCL System.Atsortingbute . Les filtres appliquent un comportement via des crochets dans le pipeline MVC (en gros).

Dans la plupart des cas, les atsortingbuts sont utilisés pour décrire les métadonnées relatives aux méthodes / classes / etc. Par exemple, l’atsortingbut Serializable indique qu’une classe peut être sérialisée, l’atsortingbut TestClass pour marquer une classe en tant que test et l’atsortingbut Obsolète pour marquer un élément comme obsolète. La reflection est utilisée pour extraire ces informations par un processus qui souhaite les utiliser. C’est couvert dans cette question sur les atsortingbuts.

Les atsortingbuts de filtre dans MVC, tels que AuthorizeAtsortingbute , transmettent des informations supplémentaires similaires à d’autres atsortingbuts – une méthode de contrôleur ou une classe décorée par AuthorizeAtsortingbute indique qu’une autorisation est requirejse lorsqu’elle est utilisée par MVC. Mais contrairement à d’autres atsortingbuts, les atsortingbuts de filtre contiennent eux-mêmes une logique permettant d’exécuter la fonction réelle – AuthorizeAtsortingbute dérive de Atsortingbute (via FilterAtsortingbute) et implémente également IAuthorizationFilter . Lorsque MVC trouve une classe de contrôleur décorée par AuthorizeAtsortingbute, il appelle la méthode AuthorizeAtsortingbute.OnAuthorization () pour exécuter l’autorisation. De plus, lorsque vous spécifiez des filtres globaux, vous ajoutez la classe d’atsortingbuts elle-même à la liste des filtres, ce qui peut être un peu déroutant, mais c’est ainsi que cela fonctionne:

 void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new AuthorizeAtsortingbute()); }