Restangular:如何获取 HTTP 响应 header?
Restangular: How to get HTTP response header?
我有一个 REST 服务器,它 returns 一个 Link
HTTP header 响应 PUT 以指示 newly-created 实体的 URL :
Link:<entities/6>; rel="created"
有没有可能用 Restangular 阅读 link header?
到目前为止,我遇到的使用 Restangular 拦截 HTTP 请求的唯一工具是在应用程序配置中注册一个响应拦截器:
restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) {
console.log(response.headers())
return response.data;
});
但是,有了上面的演示实现,唯一被记录的 HTTP header 是 content-type
。不过,我可以在浏览器开发工具栏中看到响应确实带有许多额外的 HTTP 响应 header,例如 Server
、Date
和前面提到的 Link
。
为什么我无法通过 addResponseInterceptor()
访问完整的 HTTP 响应数组 header? 有什么方法可以使用 Restangular 捕获有问题的 HTTP 响应 header?
注意:我不会使用 HAL 或任何其他特殊响应 body 格式搜索答案。我想知道我是否可以将纯 HTTP headers 与 Restangular 一起使用(如果不能,我可能会求助于 HAL 或其他东西)。
您不需要 ResponseInterceptor
来执行此操作。您只需将 fullResponse
设置为 true
即可在每次执行任何请求时获得整个响应(包括 http headers)。
Restangular.setFullResponse(true);
您可以在您的应用配置中进行全局设置。像这样:
angular.module('YourApp')
.config(['RestangularProvider',
function (RestangularProvider) {
RestangularProvider.setFullResponse(true);
...
然后,每次收到回复,您都可以访问所有回复headers。
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
中获得更详细的信息
希望对您有所帮助。
我有一个 REST 服务器,它 returns 一个 Link
HTTP header 响应 PUT 以指示 newly-created 实体的 URL :
Link:<entities/6>; rel="created"
有没有可能用 Restangular 阅读 link header?
到目前为止,我遇到的使用 Restangular 拦截 HTTP 请求的唯一工具是在应用程序配置中注册一个响应拦截器:
restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) {
console.log(response.headers())
return response.data;
});
但是,有了上面的演示实现,唯一被记录的 HTTP header 是 content-type
。不过,我可以在浏览器开发工具栏中看到响应确实带有许多额外的 HTTP 响应 header,例如 Server
、Date
和前面提到的 Link
。
为什么我无法通过 addResponseInterceptor()
访问完整的 HTTP 响应数组 header? 有什么方法可以使用 Restangular 捕获有问题的 HTTP 响应 header?
注意:我不会使用 HAL 或任何其他特殊响应 body 格式搜索答案。我想知道我是否可以将纯 HTTP headers 与 Restangular 一起使用(如果不能,我可能会求助于 HAL 或其他东西)。
您不需要 ResponseInterceptor
来执行此操作。您只需将 fullResponse
设置为 true
即可在每次执行任何请求时获得整个响应(包括 http headers)。
Restangular.setFullResponse(true);
您可以在您的应用配置中进行全局设置。像这样:
angular.module('YourApp')
.config(['RestangularProvider',
function (RestangularProvider) {
RestangularProvider.setFullResponse(true);
...
然后,每次收到回复,您都可以访问所有回复headers。
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
中获得更详细的信息
希望对您有所帮助。