我正在创建
Asp.Net MVC + AngularJS
应用程序。在WebApi控制器中,我已经处理了各种异常(500、404等)。另一方面,所有未处理的异常都会被捕获
Global.asax.cs
文件的
Application_Error
方法。 但是,如果应用程序缺少整个API,则会按预期在浏览器的控制台上显示404错误,但是在这种情况下,我也需要重定向到适当的UI(html / cshtml)。我该如何处理这种类型的异常?
PS 。我尝试使用
customErrors
属性
Web.config
文件也没有,但是没有用。
答案 0 :(得分:0)
您需要执行以下步骤,
请遵循由Imran Baloch撰写的This很棒的教程,以获取详细信息
答案 1 :(得分:0)
以下是一些有关如何处理API错误以执行重定向的方法。
$(document)
.ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
if (jqXHR.status == 404) {
window.location.replace("http://www.stackoverflow.com");
}
});
$.ajaxSetup({
global: true,
error: function(xhr, status, err) {
if (xhr.status == 404) {
window.location.replace("http://www.stackoverflow.com");
}
}
});
如果您想以角度的方式使用[Javascript] Global Ajax error handler with AngularJS。
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
return {
'response': function(response) {
// do something on success
return response || $q.when(response);
},
'responseError': function(rejection) {
// do something on error
if (canRecover(rejection)) {
return responseOrNewPromise;
}
return $q.reject(rejection);
}
};
});
$httpProvider.interceptors.push('myHttpInterceptor');
angular.module("globalErrors", ['appStateModule']).factory "myHttpInterceptor", ($q, $log, growl) ->
response: (response) ->
$log.debug "success with status #{response.status}"
response || $q.when response
responseError: (rejection) ->
$log.debug "error with status #{rejection.status} and data: #{rejection.data['message']}"
switch rejection.status
when 404
window.location.replace("http://www.stackoverflow.com");
else
console.log(rejection.status);
# do something on error
$q.reject rejection
.config ($provide, $httpProvider) ->
$httpProvider.interceptors.push('myHttpInterceptor')
这是基于AngularJS 1.1.4。如果您使用的是其他版本,则可以应用类似的策略。