2016-10-14 4 views
2

У меня есть проблема, касающаяся исключения и ловушки исключений на стороне клиента. Все это хорошо работает, пока я не представил HTTP401. Это моя база, чем контроллер ручной коррекции OnExcpetion:jQuery ajax не улавливает 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"    
    }; 
} 

Это мой AJAX вызов вместе с Succes и ошибок.

$.ajax(
{ 
    type: 'POST', 
    url: loginRoute, 
    data: formData, 
    dataType: 'json', 
    processData: false, 
    contentType: false, 
    statusCode: { 
     401: function() { 
      $('#authenticationErrorMessage').text(xhr.responseJSON.Message); 
      $('#authenticationError').show(); 
     } 
    }, 
    success: function (responseData) { 
     $('#authenticationSucessMessage').text(responseData.Message); 
     $('#authenticationSuccess').show(); 
     window.location.replace(responseData.Redirect); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     $('#authenticationErrorMessage').text(xhr.responseJSON.Message); 
     $('#authenticationError').show(); 
    } 
}); 

Проблемы состоят в том, что после завершения вызова не выдается ни код состояния, ни ошибка. Вызывается только успех. Если я установил свой StatusCode на 500, все будет работать нормально.

+0

Это не проблема! Прочтите вопрос. – Rob

+0

Я также хочу добавить, что использую OWIN Oauth. – Rob

+1

Я нашел решение [здесь] (http://stackoverflow.com/questions/20149750/owin-unauthorised-webapi-call-returning-login-page-rather-than-401). – Rob

ответ

0

Вы можете глобально справиться с этим. Может быть ниже кода поможет вам.

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

Это не работает. Мне было любопытно, поэтому я установил StatusCode на 403 в методе OnException и достаточно уверен, что ошибка была обнаружена на стороне клиента. Я проверил это с Chrome и Edge (просто чтобы узнать, не было ли что-то с Chrome). – Rob

Смежные вопросы