2012-06-19 11 views
11

Zaimplementowałem filtr wyjątków, taki jak tutaj: http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling I zarejestrowałem go globalnie, podobnie jak użytkownicy microsoft lub stackoverflow-users (How to add global ASP.Net Web Api Filters?).Web API: Filtr "globalny" nie działa (ExceptionFilter)

public static void RegisterWebApiFilters(System.Web.Http.Filters.GlobalFilterCollection filters) 
{ 
//other filters 
    filters.Add(new MyExceptionFilter()); 
} 

Ale jeśli zgłoszę wyjątek, moja metoda nie jest wywoływana. Moja metoda obsługi wyjątków jest wywoływana tylko wtedy, gdy dodaję atrybut [MyExceptionFilter] do metody kontrolera, ale miałem nadzieję, że uda mi się tego uniknąć dla wszystkich metod, rejestrując filtr globalnie.

Próbowałem ustawić kolejność filtrów, ale nie przyniosło to żadnego efektu.


Edit: Zauważyłem, że w nowym WEP Api RC metoda nazywa się "RegisterGlobalFilters" i to wydaje się być zbieranie filtr MVC.

Jeśli zadzwonię

GlobalConfiguration.Configuration.Filters.Add(new MyExceptionFilter()); 

to działa. To jest kolekcja dla Web Api.

Wygląda muszę stworzyć własną klasę „FilterConfig” dla API internetowej ...

Odpowiedz

16

Jak wspomniałem w moim pytaniu: Istnieją różne zbiory filtry. Jeden dla MVC i jeden dla interfejsu sieciowego.

Jeśli chcesz dodać filtr do API internetowej, należy dodać następujący wiersz kodu do global.asax

GlobalConfiguration.Configuration.Filters.Add(new MyExceptionFilter()); 
+1

Dzięki wskazał mnie we właściwym kierunku. Trochę głupie wszystkie te globalne kolekcje filtrów ... ..i nadal mój filtr wyjątków zarejestrowany dla normalnych kontrolerów nie działa. Grr. –

+1

Tak, mam tę linię, ale nadal nie jest uruchamiana w niektórych przypadkach. Mogę powiedzieć, że jest ona zainicjalizowana w debugerze, ale nie jest uruchamiana przy każdym wyjątku w mojej api internetowej –

+0

W WebAPIv2 [this] (http://stackoverflow.com/a/26677989/2944723) pracował dla mnie – tgarcia

Powiązane problemy