2010-01-15 6 views
12

Ich habe einen benutzerdefinierten Ausnahmefilter, den ich benutze, um eine benutzerdefinierte Ausnahme zu fangen, die ich schrieb, aber aus irgendeinem Grund, wenn ich meine Ausnahme werfen, wird es nicht immer auf den Filter . Stattdessen erhalte ich nur einen Fehler, dass meine Ausnahme nicht vom Benutzercode behandelt wurde. Kann mir bitte jemand einen Rat/Hilfe geben, wie ich das einrichten soll? Relevante Code ist unten:Benutzerdefinierter Ausnahmefilter nicht in asp.net MVC

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

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

die

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

, die die Klasse ist der Regler mit dem customexception Attribut ist (für meinen Test), der die Ausnahme auslöst (Ich habe auch versucht es direkt auf dem Controller zu werfen).

Das ist der benutzerdefinierte Ausnahmefilter ... Er wird nie erreicht, wenn der Code ausgeführt wird und die Ausnahme ausgelöst wird. Stattdessen erhalte ich den oben genannten Fehler. Alles, was ich gelesen habe, zeigt an, dass dies die richtige Methode ist, aber wenn ich Haltepunkte in meinen benutzerdefinierten Filter setze, wird es nie getroffen ....

Was fehlt mir hier?

TIA

Antwort

7

Sobald Sie Ihren Fehler behandelt haben, müssen Sie den Filter Zusammenhang wissen lassen, es behandelt wurde. Gefällt mir:

filterContext.ExceptionHandled = true; 

Dies sollte in Ihrem '// tun Zeug' Abschnitt sein.

Ich habe Ihren Code kopiert, und der Filter wird als gut bezeichnet. Der einzige Unterschied, den ich gemacht habe, war, dass ich den "exceptionHandled" -Code hinzugefügt und meinen Breakpoint an dieser Zeile hinzugefügt habe.

+0

Hoffentlich folgen Sie immer noch, obwohl es 4 Tage alt ist. Ich bin gerade dazu zurückgekehrt und habe Ihre Codezeile in meinen if-Block eingefügt ... es wird nie erreicht, da meine OnException-Methode niemals aufgerufen wird. Gibt es irgendwo eine Flagge, die ich einstellen muss (vielleicht in web.config) oder etwas, um der Anwendung zu sagen, dass sie Ausnahmen in diesem Filter behandeln soll? Ich bekomme immer noch den Fehler auf der "neue MyCustomException (" Test ");" Zeile, die angibt, dass die Ausnahme von Benutzercode nicht behandelt wurde. – Kyle

+1

Ich musste keine Flags festlegen, oder nichts zu web.config hinzufügen. Es hat einfach funktioniert. Wenn ich im Debug-Modus durch: Zuerst wird die Ausnahme ausgelöst und es bricht dort. Dann drücke ich Play und es geht zu meinem Breakpoint in OnException. Haben Sie versucht, im Debug-Modus durch? –

+0

Ich nehme an, dass alles befindet sich im selben Namespace und Sie haben nur einen CustomExceptionFilter und eine CustomException –

Verwandte Themen