Application_Error in global.asax nicht fangen Fehler in der WebAPI

Für ein Projekt an dem ich arbeite, eines der Dinge, die wir implementieren ist etwas, dass wir code in einigen meiner älteren teams ASP.NET und MVC-Projekten - eine Application_Error Ausnahme catcher, löst eine E-Mail an das Entwicklerteam mit Ausnahme Erfahrung und die meisten relevanten details.

Hier ist, wie es aussieht:

Global.asax:

protected void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();
    string path = "N/A";
    if (sender is HttpApplication)
        path = ((HttpApplication) sender).Request.Url.PathAndQuery;

    string args = string.Format("<b>Path:</b> {0}", path);

    //Custom code that generates an HTML-formatted exception dump
    string message = Email.GenerateExceptionMessage(ex, args);

    //Custom code that sends an email to the dev team.
    Email.SendUnexpectedErrorMessage("Some App", message);
}

Einem "kleinen" problem, aber - wenn ich absichtlich einen Teil des Codes eine exception zu werfen, um zu testen, dieser Mechanismus...

public static void GetMuffinsByTopping(string topping)
{
    throw new Exception("Test Exception!", new Exception("Test Inner Exception!!!"));

    //Actual repository code is unreachable while this test code is there
}

Den front-end-JavaScript ist sofort abfangen eine HTTP 500-Anfrage, sondern die Globale.asax.cs-code oben nicht erreicht wird (ich setze einen Haltepunkt auf die erste Ausführung Zeile der Methode.)

Frage: In welche Weise kann ich die "alten" Application_Error handler Versand Fehler-E-Mails, so dass unsere Mannschaft die Entwickler können sich leichter Debuggen unseren Antrag?

Sie konnte abstrakten Fehler-handling Logik in eine separate Methode, die Application_Error Anrufe, wickeln Sie das Web-API-Methode, die Körper in einem try/catch, dann manuell passieren die Fehler-Logik für die Methode abstrahiert von Web-API-Fehler. Nicht der sauberste Weg, ich bin mir sicher, aber es sollte einfach zu implementieren und "einfach funktionieren". Für eine sauberere Methode, könnte man auf Exception Handling in ASP.NET Web-API.
Ich Stimme zu, dass es eine gute "just get it working" - Vorschlag. Der Grund, warum ich Frage, ist, dass ein try/catch in jeder API-Methode ist eigentlich das, was ich versucht bin, um Weg von, meine pro-tech-Leads Führung. Wenn alle Stricke reißen, kann unser team dies als fallback, wenn. Wird es nur eine sehr widerwärtige Muster.
Ich bearbeitete meinen letzten Kommentar. Blick auf den link, den ich zur Verfügung gestellt, und haben Sie einen Blick auf Ausnahme-Filter. Das sieht aus wie eine anständige Weise zu vermeiden, dass try/catch-in allen Ihren Web-API-Methode stellen.
Dass die Wunde für mich. Würde Sie Sinn machen, eine Antwort auf Ihren Kommentar, mit einer Ausnahme-Filter ist ein besserer Weg, dies zu tun?

InformationsquelleAutor Andrew Gray | 2015-02-27

Schreibe einen Kommentar