【发布时间】:2017-03-23 08:02:42
【问题描述】:
我正在调用 REST 端点。我想添加一个资源(下)。 但是,当我的服务调用 Http 的 post 方法时,它将调用请求但不返回响应的标头。至少,我遇到了 Response 实例的空标头对象。 (??) 我确实期望响应标头。特别是,我希望 Location 标头作为“REST ADD RESOURCE”模式的一部分。 Location 标头包含新创建资源的 URL。
这很奇怪:当我直接调用我的 API(因此不是通过 Angular2)时,我得到了准确的响应,但这次是(所有)预期的标头,包括 Location 响应标头。
呃,Http.post 有问题还是我做错了什么?
请注意:在此示例中,我的服务返回一个可观察响应。这不是返回给调用者的预期类类型。我使用它是为了方便了解发布响应的情况。实际上,我打算传递存储在 Location 标头中的 url。
addModel(model: any): Observable<Response> {
let token = this.loginService.auth.accessToken;
let headers = new Headers({
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': `Bearer ${token}`
});
let options = new RequestOptions({headers: headers});
let data: string = JSON.stringify(model);
return this.http.post(this.url, data, options)
// .map(r => {
// console.log("Response ", r);
// return r.headers.get("Location"); // THERE IS NOTHING IN headers (?). Don't understand.
// })
.catch(err => Observable.throw(err));
}
【问题讨论】:
-
如果是 CORS 请求,服务器需要添加
Allow-access-expose-headers否则返回的标头对 JS 不可用。如果响应包含标题,您是否检查了浏览器的开发工具? -
嗨,Gunter,我已经登录到控制台,但没有看到任何标题。我还使用 Postman 手动触发请求,我可以在 Postman 中看到标头。 (但不在 Angular2 的 http.post 中)。我将检查您建议的 CORS 标头。很可能我还需要在 WSO2 的 API Manager 中进行一些调整。
-
登录到控制台无济于事,因为需要先使用 JS 读取它,这不起作用(如前所述)。如果它从邮递员那里工作,那肯定是 CORS 问题。