filters.Add vs FilterProviders.Providers.Add
-
24-10-2019 - |
Domanda
mi sono imbattuto in un codice di esempio MVC3 che aveva seguito nel file 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)
}
Sia MyProvider1
e MyProvider2
sono implementati con IResultFilter
, e mi sono confuso perché uno di essi viene aggiunto FilterProviders
e l'altro è registrato come un filtro globale.
Perché e quando dovremmo aggiungere filtri personalizzati su FilterProvider
, e perché e quando dovremmo registrarli come filtri globali?
Soluzione
Quando si aggiunge un filtro per il filtro GlobalFilters.Filters
otterrà eseguito per ogni richiesta.
Quando si aggiunge un IFilterProvider
al FilterProviders.Providers
il provider del filtro avranno la possibilità di decidere se un particolare filtro si applica alla richiesta corrente.
FilterProviders
offre un maggiore controllo, mentre GlobalFilters
rende facile registrare un filtro per l'intero sito.