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?
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abstrakt aus Ihrer Logik zur Fehlerverarbeitung aus
Application_Error
in seiner eigenen Funktion. Erstellen Sie eine Web-API-Ausnahme-filter.Fehlern von Web-API nicht auslösen Application_Error event. Aber wir können eine Ausnahme erstellen-filter-und registrieren Sie sich für den Umgang mit dem Fehler. Siehe auch Globale Fehlerbehandlung in ASP.NET Web-API 2.
Application_Error event nicht gefeuert, wenn die Web-API ist eine Ausnahme. Sie haben wahrscheinlich bereits die Protokollierung in Application_Error zu handhaben ASP.NET Ausnahmen. So setzen, dass Logik in einem gemeinsamen Dienst, der verwendet werden kann entweder das Ereignis Application_Error oder eine Ausnahme-filter angewendet, um Ihre Web-API-Aktion-Methoden folgt dem DRY-Prinzip. Keine duplizierte Logik.
Danke @mason, Lesen Sie den link auf Ihrer Antwort vom asp.net site hat mir sehr geholfen zu verstehen, was auch passiert. Große aswer
LOL, die Feuerwehr zu rufen 🙂 🙂
Wo soll man die Linie gestellt : GlobalConfiguration.- Konfiguration.Filter.Add(new LogExceptionFilterAttribute()); Ist es in global.asax Application_Start() oder Application_Error()?
InformationsquelleAutor mason