我有以下代码在我正在开发的业务应用程序的客户端调用服务(在后端使用.NET WebAPI):
resource = $resource(apiEndPointManager.endpoints.masterValues, {}, {
GetByCode: {
url: '{0}/:code'.format(apiEndPointManager.endpoints.masterValues),
method: 'GET',
transformResponse: function(data) {
var response = angular.fromJson(data);
if (response.length) {
// the response is an array, so convert it into an object
var object = {};
for( var i = 0; i < response.length; i ++) {
object[i] = response[i];
}
return object;
} else {
return response;
}
}
},
当我登录时,此服务运行良好, data 变量填充了我需要的json数据。但是,如果我超时, data 变量将填充整个HTML页面(更具体地说是登录调度页面)。
我不知道如何处理这种情况并正确地重定向到AngularJS中的那个页面。这样做的最佳做法是什么?
谢谢
答案 0 :(得分:0)
最后,我通过创建捕获响应的特殊拦截器解决了我的问题,如果响应是HTML页面,则执行重定向到登录页面。
resource = $resource(apiEndPointManager.endpoints.masterValues, {}, {
GetByCode: {
url: '{0}/:code'.format(apiEndPointManager.endpoints.masterValues),
method: 'GET',
interceptor: resourceResponseInterceptor
}
拦截器:
angular.module('app.services')
.factory('resourceResponseInterceptor', ['$rootScope', '$q', '$injector', function ($rootScope, $q, $injector) {
var userContext = $injector.get('$userContext');
return {
response: function (response) {
// when session is already timed out, Siteminder will return the login page with an OK code
// so check that response is HTML and if it is redirect user to the Dispatch page
if ($.isHtmlResponseContent(response)) {
window.location.href = userContext.data.LogoutUrl;
return $q.reject(response);
}
return response.resource;
}
};
}]);
$.isHtmlResponseContent = function(response) {
var isHtmlContent = false;
var contentType = response.headers('Content-Type');
if (contentType) {
isHtmlContent = contentType.indexOf('text/html') >= 0;
}
return isHtmlContent;
};
希望它可以帮助有同样问题的人!