filters.Add vs FilterProviders.Providers.Add
-
24-10-2019 - |
Question
Je suis tombé sur un exemple de code MVC3 qui avait suit dans le fichier Global.asax
:
public static void RegisterGlobalFilters(....)
{
filters.Add(new MyFilter1());
....
var provider = new MyFilterProvider();
provider.Add(c => c.HttpContext.IsDebuggingEnabled ? new MyProvider2() : null);
FilterProviders.Providers.Add(provider)
}
Les deux MyProvider1
et MyProvider2
sont mis en œuvre avec IResultFilter
, et je suis confus pourquoi l'un d'entre eux est ajouté à FilterProviders
et l'autre est enregistré en tant que filtre global.
Pourquoi et quand doit-on ajouter des filtres personnalisés sur FilterProvider
, et pourquoi et quand devrions-nous les enregistrer en tant que filtres globaux?
La solution
Lorsque vous ajoutez un filtre à GlobalFilters.Filters
le filtre sont exécutées pour chaque demande.
Lorsque vous ajoutez un IFilterProvider
à FilterProviders.Providers
le fournisseur de filtre aura une chance de décider si un filtre particulier s'applique à la demande actuelle.
FilterProviders
vous donne un meilleur contrôle tout en GlobalFilters
rend facile d'enregistrer un filtre pour l'ensemble du site.