当angularjs中的响应为304(未修改)时,$ http返回错误

时间:2014-10-14 19:38:33

标签: angularjs

我正在使用angularjs $ http向asp net web api发出请求。服务器上的web api通过ETag管理缓存。如果我的响应状态代码是304,那么它将进入错误功能而不是成功。我不明白angularjs这种奇怪行为的原因是什么。以下是我的代码

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;
    }

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我们通过实现HTTP拦截器并让拦截器在状态304上解析而不是拒绝来解决问题。

var task1 = Task.Factory.StartNew(() =>
{
    try
    {
        throw new MyCustomException("I'm bad, but not too bad!");
    }
    catch(Exception ex)
    {
        return new Result { Error = ex };
    }
});