我有一个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响应标头,例如Server
,Date
和前面提到的Link
。
为什么我无法通过addResponseInterceptor()
访问完整的HTTP响应标头数组? 有没有办法使用Restangular捕获有问题的HTTP响应头?
注意:我不会使用HAL或任何其他特殊回复正文格式搜索答案。我想知道我是否可以使用带有Restangular的普通HTTP头(如果没有,我可能会使用HAL或其他东西)。
答案 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
中获取更详细的信息
希望它有所帮助。