filters.add vs filterproviders.providers.add
-
24-10-2019 - |
Frage
Ich stieß auf einen Beispiel -MVC3 Global.asax
Datei:
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)
}
Beide MyProvider1
und MyProvider2
werden implementiert mit IResultFilter
, und ich bin verwirrt, warum einer von ihnen hinzugefügt wird FilterProviders
und der andere wird als globaler Filter registriert.
Warum und wann sollten wir benutzerdefinierte Filter hinzufügen FilterProvider
, Und warum und wann sollten wir sie als globale Filter registrieren?
Lösung
Wenn Sie einen Filter hinzufügen GlobalFilters.Filters
Der Filter wird für jede Anfrage ausgeführt.
Wenn Sie eine hinzufügen IFilterProvider
zu FilterProviders.Providers
Der Filteranbieter hat die Möglichkeit zu entscheiden, ob ein bestimmter Filter für die aktuelle Anfrage gilt.
FilterProviders
gibt Ihnen eine größere Kontrolle während GlobalFilters
Erleichtert es einfach, einen Filter für die gesamte Website zu registrieren.