$http在angularjs中响应为304(未修改)时返回错误
我使用angularjs$http向asp net web api发出请求。服务器上的web api通过ETag管理缓存。如果我的响应状态代码是304,那么它将进入错误函数,而不是成功函数。我不明白angularjs这种奇怪行为的原因是什么。下面是我的代码$http在angularjs中响应为304(未修改)时返回错误,angularjs,Angularjs,我使用angularjs$http向asp net web api发出请求。服务器上的web api通过ETag管理缓存。如果我的响应状态代码是304,那么它将进入错误函数,而不是成功函数。我不明白angularjs这种奇怪行为的原因是什么。下面是我的代码 function getEmployeesPartial(pageIndex, pageSize) { var deferred = $q.defer(); var uri = config.remoteSer
function getEmployeesPartial(pageIndex, pageSize) {
var deferred = $q.defer();
var uri = config.remoteServiceName + 'odata/Employees?$select=EmployeeId,FirstName,LastName,Email,Designation/Name&$top=' + pageSize + '&$skip=' + (pageIndex * pageSize) + '&$inlinecount=allpages' + '&$expand=Designation';
var authData = common.getAuthData();
var authHeaderValue = "Bearer " + authData.token;
var etagHeaderValue = angular.empty;
if (common.etag !=angular.empty) {
etagHeaderValue = common.etag;
}
$http.get(uri, { headers: { 'Authorization': authHeaderValue,'If-None-Match':etagHeaderValue } }).success(function (response, status, headers, httpconfig) {
// alert(headers('Etag'));
common.etag = headers('Etag');
deferred.resolve(response);
}).error(function (err, status, headers, httpconfig) {
if (status === 500) {
deferred.reject(err['odata.error'].innererror.message);
}
deferred.resolve();
});
return deferred.promise;
}
有什么想法吗?我们已经解决了这个问题,实现了一个HTTP拦截器,让拦截器在状态304上解析,而不是拒绝
// register the interceptor as a service
$provide.factory('myHttpInterceptor', function ($q, dependency1, dependency2) {
return {
'responseError': function (rejection) {
if (rejection.status === 304) return $q.resolve(rejection);
return $q.reject(rejection);
}
};
});
是的,因为angular将成功视为返回200