私はAngular2 AppでDropbox HTTP APIを使用しています。私はログインし、承認し、list_folder
リクエストなどを使用することができます。これはすべて期待通りに動作します。
しかし、私はfiles/download
に簡単なPOSTリクエストを実行しようとしたとき、私は私が空でないcontent-type
を提供してきましたというエラーが出ます:Angular2 HTTP - 空でないHTTPコンテンツタイプヘッダーを提供する* Safari *
Error in call to API function \"files/download\": You provided a non-empty HTTP \"Content-Type\" header (\"text/plain;charset=UTF-8\").
これは私の現在のコードです - 私はそれをさまざまな方法を試してみましたどこでもcontent-type
を設定していません。
let headers = new Headers();
let url = 'https://content.dropboxapi.com/2/files/download';
headers.append('Authorization', `Bearer <inserted-bearer-here>`);
headers.append("Dropbox-API-Arg", "{\"path\": \"/Documents/code/convert.js\"}");
console.log(headers);
// this is an RxJS observable which is subscribed to later in my code...
return this.http.post(url, null, { headers: headers });
私はそれらを送信する前に、コンソールにヘッダをログに記録するのでcontent-type
は間違いなく設定されていません。この問題にいくつかの光を当てることができ
誰もが?私はSOに関する他の質問を見て、間違ってcontent-type
フィールドなどを設定しただけで、設定されていない場所や動作していない場所は何も見つかりませんでした。
- 編集 -
このコードは、Chromeで正しく動作します。
let headers = new Headers({
'Authorization': `Bearer ${this.userData.bearer}`,
'Dropbox-API-Arg': "{\"path\": \"/Documents/code/convert.js\"},
'content-type': null
});
http.post(url, null, { headers: headers })
.subsribe(...);
しかし、SafariでContent-Type
がnull
であれば、それは自動的に私がtext/plain;charset=UTF-8
を追加しているようです空のHTTPヘッダーを強制的に送信する方法を見つけることができないようです。もし誰かがこの問題に対する答えを知っていれば/またはSafariのためのpolyfill/fix絶対に素晴らしいだろう!
私はあなたのコードを使って、ネットワークタブで実際のネットワークリクエストを見て、Dropbox APIへのHTTPリクエストは 'Content-Type'ヘッダセットを持っています:' Content-Type:text/plain; charset = UTF -8'。 Angular httpライブラリは、明らかにその背後でそれを設定します。 Dropbox APIは、(本文を記述することがないので)設定しないようにする必要があります。そのため、Angular httpライブラリがそれをやめないようにすることが解決策です。私は残念なことにオフハンドする方法を知らない。 – Greg
@Gregに感謝します。 –