RESTエンドポイントを呼び出しています。私はリソースを追加したい(下記)。 しかし、私のサービスがHttpのpostメソッドを呼び出すと、リクエストを呼び出しますが、レスポンスのヘッダは返されません。少なくとも、私はResponseインスタンスの空のヘッダーオブジェクトを経験します。 (??) 私は応答ヘッダーを期待します。特に、私はLocationヘッダーが "REST ADD RESOURCE"パターンの一部として期待しています。 Locationヘッダーには、新しく作成されたリソースのURLが含まれます。Angular2のHttp.postがPOSTメソッド呼び出しの応答でヘッダーを返さない
私はAPIを直接呼び出すと(正確にはAngular2経由ではありません)、正確な応答が得られますが、今回は(すべての)予想されるヘッダー(Location応答ヘッダーを含む)を取得します。
Uhh、Http.postに何か問題がありますか、何か間違っていますか?
:私のサービスは、この例ではObservable Responseを返します。これは、呼び出し側に返すための意図されたクラスタイプではありません。私は、ポストレスポンスで起こっていることを理解する便宜のためにそれを使用しています。実際には、Locationヘッダーに格納されているURLを渡すことが私の意図です。サーバがそう返されたヘッダがJSに使用することはできませんAllow-access-expose-headers: headername
を追加する必要がCORSリクエストで
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では利用できません。レスポンスにヘッダーが含まれている場合は、ブラウザのdevtoolsをチェックインしましたか? –
こんにちはガンター、私はコンソールにログオンしていましたが、ヘッダーは表示されませんでした。私はまた、手作業でリクエストを発し、私はPostmanでヘッダーを見ることができました。 (しかしAngular2のhttp.postではなく)。あなたが提案したCORSヘッダをチェックアウトするつもりです。ほとんどの場合、WSO2のAPIマネージャで調整する必要があります。 – user2120188
コンソールへのロギングは、先に述べたように動作しないJSを最初に使用して読み込む必要があるため、役に立ちません。それが郵便配達所から働くのであれば、間違いなくCORSの問題です。 –