2010-01-15 11 views
12

Mam niestandardowy filtr wyjątków, którego używam do przechwytywania niestandardowego wyjątku, który napisałem, ale z jakiegoś powodu, kiedy wyrzucam wyjątek, nigdy nie dociera do filtra . Zamiast tego po prostu dostaję błąd, że mój wyjątek nie był obsługiwany przez kod użytkownika. Czy ktokolwiek może udzielić porady/pomocy, jak powinienem mieć tę konfigurację? Odpowiedni kod jest poniżej:Niestandardowy filtr wyjątków nie jest trafiony w asp.net MVC

// controller  
[CustomExceptionFilter] 
    public class SomeController : Controller 
    {  
     public SomeController() 
     { 

     } 
     public ActionResult Index() 
     { 
      SomeClass.SomeStaticMethod(); 
      return View(); 
     } 
    } 

to kontroler z atrybutem customexception

// some class (where exception is being thrown) 
public class SomeClass 
{ 
    public static void SomeStaticMethod() 
    { 
     throw new MyCustomException("Test"); 
    } 
} 

że jest klasa (dla mojego testu), który zgłasza wyjątek (ja również próbował wyrzucić je bezpośrednio na kontrolerze).

// Custom exception filter (want this to catch all unhandled exceptions) 
public class CustomExceptionFilter : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext.Exception.GetType() == typeof(MyCustomException)) 
     { 
      // do stuff 
     } 
    } 
} 

to niestandardowy filtr wyjątków ... nigdy nie zostanie osiągnięty, gdy kod zostanie wykonany, a wyjątek zostanie zgłoszony. Zamiast tego otrzymuję błąd wspomniany powyżej. Wszystko, co przeczytałem, wskazuje, że jest to właściwy sposób ustawienia, ale kiedy umieszczam punkty przerwania w moim niestandardowym filtrze, nigdy nie jest on trafiony ...

Czego mi tu brakuje?

TIA

Odpowiedz

7

Po obchodzić swój błąd, trzeba dać znać kontekst filtra zostało obsłużone. W ten sposób:

filterContext.ExceptionHandled = true; 

Powinno to być w sekcji "// Rób rzeczy".

Skopiowałem twój kod, a filtr nazywał się "dobrze". Jedyną różnicą, jaką zrobiłem, było dodanie kodu exceptionHandled i dodanie punktu przerwania w tej linii.

+0

Mam nadzieję, że nadal to robisz, mimo że ma 4 dni. Właśnie wróciłem do tego i dodałem linię kodu wewnątrz mojego bloku if .... nigdy nie jest osiągalny, ponieważ moja metoda OnException nigdy nie jest wywoływana. Czy jest gdzieś flaga, którą muszę ustawić (może w web.config) lub coś, co mówi aplikacji o obsłudze wyjątków w tym filtrze? Nadal dostaję błąd w "throw new MyCustomException (" Test ");" linia wskazująca, że ​​wyjątek był nieobsługiwany przez kod użytkownika. – Kyle

+1

Nie musiałem ustawiać żadnych flag ani dodawać niczego do web.config. To po prostu działało.Po przejściu w trybie debugowania: Najpierw wyjątek jest generowany i tam się łamie.Po naciśnięciu play i przechodzi do mojego punktu przerwania w OnException.Czy próbowałeś przejść przez tryb debugowania? –

+0

Zakładam, że wszystko znajduje się w tej samej przestrzeni nazw i masz tylko jeden wyjątek CustomExceptionFilter i CustomException. –

Powiązane problemy