2016-04-03 5 views
1

Das wird vielleicht seltsam klingen, aber ich versuche herauszufinden, wo Debug Informationen über Ausnahmen von innerhalb einer MVC Web API übertragen werden. Jedes Mal, wenn eine Ausnahme auftritt, es gibt ein Objekt (JSON formatiert, weil ich die XML-Formatierungs entfernt) mit den folgenden Attributen:MVC Web API Ausnahmehandler JSON Debug Info mit OWIN/Kotana

  • Nachricht

  • ExceptionMessage

  • Exception

  • Stacktrace

Ich ersetzen die vorhandene Implementierung von IExceptionHandler mit der folgenden Zeile in WebApiConfig.Register()

config.Services.Replace(typeof(IExceptionHandler), new CustomExceptionHandler()); 

Doch obwohl ich in der Lage bin, um zu bestätigen, dass die neuen Handler aufgerufen werden, wenn eine Ausnahme (über Debug-Haltepunkte) auf, die Das gleiche JSON-Objekt mit Debug-Informationen zum Fehler wird zurückgegeben.

Meine Frage ist das: Welche Lager-System oder Mechanismus ist verantwortlich für das Generieren und Senden dieser Informationen?

Antwort

0

Werfen Sie einen Blick auf Global Error Handling in ASP.NET Web API 2

Die ExceptionHandlerContext Klasse in der Handle Methode des Exception

Stellt den Kontext, in dem nicht behandelten Ausnahmebehandlung

Die ExceptionHandlerContext.Result

auftritt

Ruft das Ergebnis ab, das die Antwortnachricht liefert, wenn die Ausnahme behandelt wird, oder legt es fest.

Benutzerdefinierte Fehlermeldung Exception Handler

Die folgende unten eine benutzerdefinierte Fehlerantwort an Kunden produziert, einschließlich einer E-Mail-Adresse für den Support kontaktieren.

class OopsExceptionHandler : ExceptionHandler 
{ 
    public override void HandleCore(ExceptionHandlerContext context) 
    { 
     context.Result = new TextPlainErrorResult 
     { 
      Request = context.ExceptionContext.Request, 
      Content = "Oops! Sorry! Something went wrong." + 
         "Please contact [email protected] so we can try to fix it." 
     }; 
    } 

    private class TextPlainErrorResult : IHttpActionResult 
    { 
     public HttpRequestMessage Request { get; set; } 

     public string Content { get; set; } 

     public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) 
     { 
      HttpResponseMessage response = 
          new HttpResponseMessage(HttpStatusCode.InternalServerError); 
      response.Content = new StringContent(Content); 
      response.RequestMessage = Request; 
      return Task.FromResult(response); 
     } 
    } 
} 

können Sie die IHttpActionResult verwenden, um den Web-api zu verlängern jeden Antworttext erstellen Sie wollen.