2016-10-14 4 views
2

Ich habe ein Problem in Bezug auf Ausnahme werfen und auf Client-Seite zu fangen. Das hat alles gut funktioniert, bis ich HTTP401 eingeführt habe. Dies ist meine Basis-Controler als Überschreibungen OnExcpetion:jQuery ajax fängt nicht 401

protected override void OnException(ExceptionContext filterContext) 
{ 
    var exception = HandleException.Handle(filterContext.Exception); 
    filterContext.Exception = exception; 

    if(exception is AuthenticationException) 
     filterContext.HttpContext.Response.StatusCode = 401; 
    else 
     filterContext.HttpContext.Response.StatusCode = 500; 

    filterContext.ExceptionHandled = true; 
    filterContext.Result = new JsonResult() 
    { 
     Data = new { Message = filterContext.Exception.Message }, 
     ContentType = "json"    
    }; 
} 

Dies ist meine Ajax-Aufruf zusammen mit Erfolg und Irrtum.

Die Probleme sind, dass weder Statuscode noch Fehler bei Abschluss aufgerufen werden. Nur Erfolg wird genannt. Wenn ich meinen StatusCode auf 500 setze, funktioniert alles einwandfrei.

+0

Das ist nicht das Problem! Lies die Frage. – Rob

+0

Ich möchte auch hinzufügen, ich verwende OWIN Oauth. – Rob

+1

Ich habe die Lösung [hier] gefunden (http://stackoverflow.com/questions/20149750/owin-unauthorized-webapi-call-returning-login-page-rather-than-401). – Rob

Antwort

0

Sie können global damit umgehen. Kann unter dem Code sein, der dir hilft.

$(document).ajaxError(function(event, jqxhr, settings, exception) { 
    if (jqxhr.status== 401) { 
     alert("Triggered ajaxError handler."); 
    } 
}); 
+0

Es funktioniert nicht. Ich war neugierig, also habe ich in der OnException-Methode den StatusCode auf 403 gesetzt und sicher, dass der Fehler auf der Clientseite abgefangen wurde. Ich habe das mit Chrome und Edge getestet (nur um zu sehen, ob es etwas mit Chrome nicht gab). – Rob