2015-06-08 10 views
6

Chcę użyć interfejsu IOverrideFilter, aby nadpisać mój niestandardowy filtr globalny, ale po prostu nie działa! Kod wygląda się następująco:Używanie IOverrideFilter do przesłonięcia niestandardowego ActionFilters

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

Mój filtr globalny wdrożył ITest interfejs. Wiem, że mogę wykonać zadanie w moim oryginalnym globalnym filtrze, ale chciałbym to zrobić przez IOverrideFilter.

Każdy pomysł?

Odpowiedz

7

MSDN informacji nie jest do końca jasne, o tym, ale IOverrideFilter.FiltersToOverride musi być dokładnie jedną z następujących czynności:

  • IActionFilter
  • IAuthorizationFilter
  • IAuthenticationFilter
  • IExceptionFilter

Zasadniczo nie można przesłonić określonych filtrów, można tylko zastąpić wszystkie filtry jednej z powyższych kategorii. Spójrz na metodę ProcessOverrideFilters w source code.

Więc powiedzmy, że filtr ITest jest typu IActionFilter, wówczas korekcja będzie (Ta sama logika miałaby zastosowanie do każdej innej filtr):

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

Można również użyć predefiniowanych OverrideActionFilters (i podobne predefiniowane atrybuty zastąpienia dla innych kategorii filtrów).

Dla ręcznym bardziej drobnoziarnistej, może być konieczne do opracowania konkretnych rozwiązań like this one lub wyraź swoją dostawca filtr as in this very nice article

Powiązane problemy