2013-05-08 17 views
8

Czy jest jakiś sposób w interfejsie API środowiska ASP.NET do oznaczenia wyjątku jako obsługiwanego w obiekcie ExceptionFilterAttribute?Ustawianie wyjątku obsługiwanego w interfejsie API sieci Web ExceptionFilterAttribute

Chcę obsłużyć wyjątek na poziomie metody z filtrem wyjątków i zatrzymać propagację do globalnie zarejestrowanego filtru wyjątku.

Filter wykorzystywane na działania kontrolera:

public class MethodExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     if (context.Exception is NotImplementedException) 
     { 
      context.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError) 
      { 
       Content = new StringContent(context.Exception.Message) 
      }; 
      // here in MVC you could set context.ExceptionHandled = true; 
     } 
    } 
} 

rejestrowanego globalnie filtr:

public class GlobalExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     if (context.Exception is SomeOtherException) 
     { 
      context.Response = new HttpResponseMessage(HttpStatusCode.SomethingElse) 
      { 
       Content = new StringContent(context.Exception.Message) 
      }; 
     } 
    } 
} 
+0

Czy możesz podać przykład "obsługi wyjątku na poziomie metody z filtrem wyjątków"? – giacomelli

+0

Aby dostać się do filtra globalnego, wyjątek musi być w pierwszej kolejności nieobsługiwany w metodzie - więc dlaczego nie owinąć niebezpiecznego kodu w bloku 'try/catch' i tam go obsłużyć? –

+0

Dodano przykłady. – adamwtiko

Odpowiedz

2

Spróbuj rzuca HttpResponseException na końcu lokalnej obsługi. Z założenia nie są one przechwytywane przez filtry wyjątków.

throw new HttpResponseException(context.Response); 
+0

Stara odpowiedź, ale chciałem tylko wskazać, że nie przeszkadza to w wykonaniu większej ilości czynności. – Tipx

Powiązane problemy