Restangular:如何获取HTTP响应头?

时间:2015-09-24 13:04:47

标签: http-headers restangular

我有一个REST服务器,它返回一个Link HTTP标头,其中包含对PUT的响应,以指示新创建的实体的URL:

Link:<entities/6>; rel="created"

是否有可能使用Restangular读取该链接头?

到目前为止,唯一能够使用Restangular拦截HTTP请求的工具是在app config中注册响应拦截器:

restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) {
    console.log(response.headers())
    return response.data;
});

但是,通过上面的演示实现,记录的唯一HTTP标头是content-type。不过,我仍然可以在浏览器开发工具栏中看到,响应确实存在许多其他HTTP响应标头,例如ServerDate和前面提到的Link

为什么我无法通过addResponseInterceptor()访问完整的HTTP响应标头数组? 有没有办法使用Restangular捕获有问题的HTTP响应头?

注意:我不会使用HAL或任何其他特殊回复正文格式搜索答案。我想知道我是否可以使用带有Restangular的普通HTTP头(如果没有,我可能会使用HAL或其他东西)。

1 个答案:

答案 0 :(得分:10)

您不需要ResponseInterceptor来执行此操作。您每次执行任何请求时,只需将fullResponse设置为true即可获得整个响应(包括http标头)。

Restangular.setFullResponse(true);

您可以在应用配置中全局设置它。像这样:

angular.module('YourApp')
     .config(['RestangularProvider',
       function (RestangularProvider) {
         RestangularProvider.setFullResponse(true);
...

然后,每次收到回复时,您都可以访问所有响应标题。

Restangular.all('users').getList().then(function(response) {
    $scope.users = response.data;
    console.log(response.headers);
}

示例:

response.headers('Link')

注意:请注意,因为使用fullResponse,响应数据位于response.data中,而不是直接响应。

编辑:在@STEVER点时,您还需要在服务器API中expose the headers。 示例:

Access-Control-Expose-Headers: Link

您可以在Restangular documentation

中获取更详细的信息

希望它有所帮助。