2016-05-16 12 views
2

私は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は間違いなく設定されていません。この問題にいくつかの光を当てることができ

Logged headers variable

誰もが?私は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-Typenullであれば、それは自動的に私がtext/plain;charset=UTF-8

を追加しているようです空のHTTPヘッダーを強制的に送信する方法を見つけることができないようです。もし誰かがこの問題に対する答えを知っていれば/またはSafariのためのpolyfill/fix絶対に素晴らしいだろう!

+2

私はあなたのコードを使って、ネットワークタブで実際のネットワークリクエストを見て、Dropbox APIへのHTTPリクエストは 'Content-Type'ヘッダセットを持っています:' Content-Type:text/plain; charset = UTF -8'。 Angular httpライブラリは、明らかにその背後でそれを設定します。 Dropbox APIは、(本文を記述することがないので)設定しないようにする必要があります。そのため、Angular httpライブラリがそれをやめないようにすることが解決策です。私は残念なことにオフハンドする方法を知らない。 – Greg

+0

@Gregに感謝します。 –

答えて

1

headers.append('Content-Type', null);を追加してみませんか?

これは私のために働くようだ

http.post(url, null, new RequestOptions({ 
    headers: new Headers({'Content-Type': null}) 
})).subscribe(...); 
+1

API関数\ "files/download \"の呼び出しで同じエラーが発生しました:空のHTTP \ "Content-Type \"ヘッダー(\ "、text/plain; charset = UTF-8 \")。 'あなたのコードを正確に複製し、' authorization'ヘッダに追加しました。何らかの理由で、要求が送信された後に変更され続けます! –

1
headers.append('Content-Type', ' '); 

nullでは動作しない、空の文字列が動作しませんが、これは運転していた

空白が動作しません私はナッツと私は解決策を見つけることができませんでした - これは乾草の穿孔でランダムな針だった、それは動作します。

+1

これは一部のブラウザでは動作しますが、MobileSafariでは「DOM例外12」になります。私は最終的に、標準の 'XMLHttpRequest'オブジェクトを作成し、それを古い方法でやっています! –

+0

くそー!私はこれについてあなたからの投票を得ようと思っていました。 :)私はMobileSafariでテストしていないので、おそらくあなたのソリューションに切り替える必要があるでしょう。これは、ヘッダーに*いくつかの*ブラウザのために選択的に追加している角2のhttpライブラリでなければならないことを意味します。 – kris

0

を追加すると、headers.append('Content-Type','');が追加されます。