2016-05-03 5 views
1

Ich verwende den folgenden Code in einem MVC-Controller, um Ausnahmen zu verarbeiten, die während eines Ajax-Aufrufs auftreten.Wie ajax Ausnahme mit MVC und angularjs verarbeiten?

protected override void OnException(ExceptionContext filterContext) 
     { 
      if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") 
      { 
       filterContext.Result = new JsonResult 
       { 
        JsonRequestBehavior = JsonRequestBehavior.AllowGet, 
        Data = new { Error = true, Msj = filterContext.Exception.Message } 
       }; 
      } 
} 

Ich möchte den Fehler in der Front-End verarbeiten, um die errorCallback Funktion des Objekts $ http (AngularJS). Das Problem ist das folgende, wenn ich setze filterContext.ExceptionHandled = true;

Angular erkennt den Fehler nicht und führt die Erfolgsfunktion aus. Wenn ich filterContext.ExceptionHandled = false; setzen, wird Angular die Fehlerfunktion ausführen, aber asp.net wird das Objekt "Data" des Json-Ergebnisses durch die übliche gelbe Fehlerseite ersetzen.

Ist es möglich zu vermeiden, dass asp.net die Antwort ersetzt?

Jede Hilfe wird geschätzt?

Grüße

+0

Sind Sie sehr sicher, ob Ihre Bedingung wahr ist? – Shyju

+0

Ja, vollständig. Ich habe korrekt Angular-Header konfiguriert: $ http.defaults.headers.post ["X-Requested-With"] = "XMLHttpRequest"; – Ayorus

+0

Werfen Sie einen Blick auf die Antwort, die ich gepostet habe. – Shyju

Antwort

1

Sie vermissen 2 Dinge.

  1. Sie müssen die ExceptionHandled Eigenschaft auf true setzen, so dass der Rahmen nicht das normale Ausnahmebehandlung Verfahren tun und gibt den Standard-gelben Schirm des Tod Seite.

  2. Sie müssen den Antwortstatuscode als 5xx (Fehlerreaktion) angeben. Die Clientbibliothek bestimmt, ob der Erfolgsrückruf oder der Fehlerrückruf basierend auf dem Statuscode der zurückkommenden Antwort ausgeführt werden soll.

Dies sollte funktionieren.

protected override void OnException(ExceptionContext filterContext) 
{ 
    if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest") 
    { 
     filterContext.Result = new JsonResult 
     { 
      JsonRequestBehavior = JsonRequestBehavior.AllowGet, 
      Data = new { Error = true, Msj = filterContext.Exception.Message } 
     }; 
     filterContext.HttpContext.Response.StatusCode = 500; 
     filterContext.ExceptionHandled = true; 
    } 
} 
+1

Es ist wahr. Vielen Dank ! – Ayorus