2016-05-16 27 views
2

因此,我正在使用Dropbox HTTP API与我的Angular2应用程序。我可以登录,授权和使用list_folder请求等,这一切都按预期工作。
但是,当我试图执行一个简单的POST请求files/download我得到一个错误说我提供了一个非空content-typeAngular2 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函数的错误\“文件/下载\”:您提供了一个非空的HTTP \“Content-Type \”标题(\ “,text/plain; charset = UTF-8 \”)。“我完全复制了你的代码,并将其添加到'authorization'头文件中。出于某种原因,请求发送后它会不断变化! –

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

空不工作,空字符串不工作,而是一个空白确实工作

该驾驶我疯了,我找不到解决办法 - 这是一个干草堆预感中的随机针,它确实有效。

+1

它对某些浏览器有效,但导致MobileSafari出现DOM异常12。我最终创建了一个标准的'XMLHttpRequest'对象,并以旧式的方式进行工作! –

+0

该死!我以为我打算为此得分。 :)我还没有在MobileSafari上测试过,我需要它,因此可能需要切换到您的解决方案。这意味着它必须是有选择地添加到头部的角度为2的http库,用于某些浏览器 - 很奇怪。 – kris

0

添加headers.append('Content-Type','');适合我。