Restangular:如何获取HTTP响应头?

Spu*_*ick 3 http-headers restangular

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

Link:<entities/6>; rel="created"
Run Code Online (Sandbox Code Playgroud)

有没有可能用Restangular读取该链接头?

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

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

但是,通过上面的演示实现,记录的唯一HTTP头是content-type.不过,我可以在一个响应来确实增加了不少额外的HTTP响应头,比如浏览器工具栏的发展看Server,Date和前述Link.

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

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

tro*_*oig 10

你不需ResponseInterceptor要这样做.每次执行任何请求时,您只需设置fullResponsetrue获取整个响应(包括http标头).

Restangular.setFullResponse(true);
Run Code Online (Sandbox Code Playgroud)

您可以在应用配置中全局设置它.像这样的东西:

angular.module('YourApp')
     .config(['RestangularProvider',
       function (RestangularProvider) {
         RestangularProvider.setFullResponse(true);
...
Run Code Online (Sandbox Code Playgroud)

然后,每次收到响应时,您都可以访问所有响应标头.

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

例:

response.headers('Link')
Run Code Online (Sandbox Code Playgroud)

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

编辑:作为@STEVER点,您还需要在服务器API中公开标头.例:

Access-Control-Expose-Headers: Link
Run Code Online (Sandbox Code Playgroud)

您可以在Restangular文档中获取更多详细信息

希望能帮助到你.

  • 也不要忘记设置正确的https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Expose-Headers (3认同)