在我的Angular SPA中,我的authHttpResponseInterceptor
定义如下:
app.factory('authHttpResponseInterceptor', ['$q', '$location', 'baseUrl', function ($q, $location, baseUrl) {
return {
response: function (response) {
if (response.status === 401) {
console.log('Response 401');
}
else if (response.status === 409) {
$location.path('/sessionexpired');
}
return response || $q.when(response);
},
responseError: function (rejection) {
if (rejection.status === 401) {
window.location.href = baseUrl + 'Account/Logout';
}
else if (rejection.status === 409) {
$location.path('/sessionexpired');
}
return $q.reject(rejection);
}
}
}]);
我将拦截器添加到我的$ httpProvider中,如下所示:
$httpProvider.interceptors.push('authHttpResponseInterceptor');
如果我从服务器获得409 HTTP状态,我想将位置更改为sessionexpired
路径。出于某种原因,这只会偶尔发挥作用。
我定义了以下路线:
.when('/sessionexpired',
{
controller: 'sessionExpiredController',
templateUrl: baseUrl + 'Content/templates/409.html'
})
.when('/error',
{
templateUrl: baseUrl + 'Content/templates/500.html'
})
我正在调试authHttpResponseInterceptor
,因为它没有指向sessionexpired
路线。它只是跨越$location.path()
行,永远不会进入sessionExpiredController
控制器,最终会出现在error
页面上。
有什么想法吗?