2015-06-08 9 views
6

Desidero utilizzare l'interfaccia IOverrideFilter per sovrascrivere il mio filtro globale personalizzato ma semplicemente non funziona! Codice sembra di essere come segue:Utilizzo di IOverrideFilter per sovrascrivere ActionFilters personalizzati

public sealed class MyGlobalFilterExceptionAttribute : FilterAttribute, IOverrideFilter 
{ 
    public Type FiltersToOverride 
    { 
     get { return typeof(ITest); } 
    } 
} 

mio filtro globale ha implementato ITest interfaccia. So che posso implementare l'operazione nel mio filtro globale originale, ma vorrei farlo da IOverrideFilter.

Qualche idea?

risposta

7

Le informazioni MSDN non è del tutto chiaro, ma IOverrideFilter.FiltersToOverride deve essere esattamente una delle seguenti opzioni:

  • IActionFilter
  • IAuthorizationFilter
  • IAuthenticationFilter
  • IExceptionFilter

Fondamentalmente, non puoi ignorare filtri specifici, puoi solo sostituire tutti i filtri di una delle categorie sopra. Dai uno sguardo al metodo ProcessOverrideFilters nello source code.

Quindi, diciamo che il vostro filtro ITest è di tipo IActionFilter, allora il vostro sostituzione sarà (La stessa logica si applica per qualsiasi altro Filtro):

public Type FiltersToOverride 
{ 
    get { return typeof(IActionFilter); } 
} 

si potrebbe anche utilizzare il predefinito OverrideActionFilters (e attributi di override predefiniti simili per altre categorie di filtri).

Per una sostituzione più a grana fine, potrebbe essere necessario per sviluppare soluzioni specifiche like this one o lascia la tua fornitore di filtro as in this very nice article

Problemi correlati