2013-07-03 6 views
6

Ich baue eine .NET WebApi-Anwendung, und ich möchte einen globalen Fehlerhandler einrichten (im Grunde eine Funktion, die ausgeführt wird, wenn eine Ausnahme von irgendwo in der Anwendung aufspringt). this link klagt Unterstützung dafür, aber einige Problemumgehungen werden angeboten. Leider kann ich keine brauchbare Dokumentation für irgendeinen von ihnen finden.Wie richte ich einen globalen Fehlerhandler in WebApi ein?

Hier sind meine Anforderungen:

  • Fang in Aktion Methoden getroffen Ausnahmen sowie in anderen Orten (e g Controller Auflösung..).
  • Zugriff auf das ursprüngliche Ausnahmeobjekt während meiner Behandlung.
  • Zugriff auf Dienste in meinem (Autofac) IOC-Container während der Fehlerbehandlung (dies ist ein starkes Bedürfnis, aber kein Muss).
  • Keine Abhängigkeit von MVC (ich verwende reines WebApi). Keine Abhängigkeit von IIS ist sehr wünschenswert.

Wie gehe ich vor?

Antwort

0

Es gibt ein paar Optionen, die Sie beachten sollten:

Ereignis AppDomain.CurrentDomain.FirstChanceException:

Wird für jede Ausnahme Feuer ganz gleich, ob es gehandhabt wird. Verwenden Sie dies für die Protokollierung usw. vor Ihrem spezifischen Handler.

Ereignis AppDomain.CurrentDomain.UnhandledException:

Wird für jede Ausnahme Feuer nicht in Code behandelt

Sie müssten Handler in einen Dienst erstellen, die den Zugriff auf Ihre IOC-Container etc hat

+0

Werden die UnhandlesExceptionHandler tatsächlich funktionieren, wenn sie auf einem Web-Server oder tun geworfen Ausnahmen ausgeführt von dem zugrunde liegenden Server verschluckt? – ChaseMedallion

+0

Aus meinen Tests wird der UnhandledException-Handler nie tatsächlich ausgeführt ... scheint wie der zugrunde liegende Server die Ausnahme irgendwo abfangen. – ChaseMedallion

+0

Ich gestehe, ich habe nicht in WebApi versucht. Entschuldigung, das hat nicht für Sie funktioniert. Hast du etwas wie ELMAH https://code.google.com/p/elmah/ in Erwägung gezogen? Dies bietet eine sehr umfangreiche Ausnahmeprotokollierung. Hier ist ein Artikel, wie man http://www.tugberkugurlu.com/archive/asp-net-web-api-and-elmah-integration integriert – user2509738

7

Wenn Sie aktualisieren zu Web API v2.1, verfügbar über Nuget mit diesem Befehl:

Sie kann einen Global Exception Handler erstellen, indem er von Exception Logger erbt. Hier

ein Beispiel:

class TraceExceptionLogger : ExceptionLogger 
{ 
    public override void LogCore(ExceptionLoggerContext context) 
    { 
     Trace.TraceError(context.ExceptionContext.Exception.ToString()); 
    } 
} 

Weitere Details in der Release Notes hier: http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-21#global-error

+0

eine Idee, ob dies auch für eine MVC-Anwendung verwendet werden kann? – gldraphael

+1

Sie sollten die vollständige Lösung posten, anstatt auf eine Seite zu verlinken. Dies muss noch aufgerufen werden: 'config.Services.Add (typeof (IExceptionLogger), neuer TraceSourceExceptionLogger (neue TraceSource ("MyTraceSource", SourceLevels.All))); ' – makhdumi

Verwandte Themen