【问题标题】:Restangular: How to get HTTP response header?Restangular:如何获取 HTTP 响应标头?
【发布时间】:2015-09-24 13:04:46
【问题描述】:

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

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

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

到目前为止,我遇到的使用 Restangular 拦截 HTTP 请求的唯一工具是在应用配置中注册响应拦截器:

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 或其他东西)。

【问题讨论】:

  • 您好!这个答案能帮助您解决问题吗?请注意 STEVER 建议的编辑很重要。

标签: http-headers restangular


【解决方案1】:

您不需要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获取更多详细信息

希望对你有帮助。

【讨论】:

  • 感谢@STEVER!你说得对,我忘了说。我已经编辑了答案
  • 谢谢 troig 和 STEVER,它确实有效!但是,我还需要设置Access-Control-Allow-Headers: Content-Type。不知道这有什么关系。此外,我设法将其实现为本地“派生”的 Restangular 服务,如github.com/mgonto/…,允许我专门在某些页面上使用此行为。
猜你喜欢
  • 2016-09-21
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多