我刚刚升级到 Angular 2 RC 5
并且由于我无法弄清楚的原因,我无法发出任何 http 请求(即请求从未发出/不显示在浏览器日志中)。
这是在今天升级之前一直有效的代码。
console.log("Let's call github");
let url = 'https://raw.githubusercontent.com/angular/angular/master/LICENSE';
return this.get(url).do(d=>console.log('success'));
当我的组件调用包含此代码的函数时,输出了Let's call github
,但随后没有发出请求。我确定 @angular/http
中的 Observable
和 Http
已正确导入,因为相同的代码今天早上有效。我的第一个想法是我缺少 HttpModule
,但我已经确认我将它导入了我的主 AppModule
事实上,如果我注释掉 HttpModule
导入,我看不出有什么不同。报错一样,如下:
Exception: TypeError: this._body is null
最佳答案
2016-08-12更新
这个问题已经解决,可能会在下一个版本中修复。当前的解决方法是在 GET
请求中跳过 content-type
设置,或者将 body=''
显式设置为请求选项。
原始答案
错误似乎与我在每个 http 请求之前运行的函数中的代码块有关。因为我与之交互的 API 需要 JSON
内容,所以我有以下内容(options
指的是用于每个请求的 RequestOptions
对象):
//set content to JSON
if(!options.headers.has("Content-Type")){
options.headers.append("Content-Type", "application/json")
}
如果我注释掉这些行,请求就成功了。所以我在想,从 Angular 2 rc 5
开始,如果请求正文为空,这个 block 就会抛出一个错误(就像我从 OP 发出的 get
请求一样) ).
如果我的直觉是正确的,这种行为变化是由 this commit 引起的(rc 5
的新手)
fix(http): convert objects passed to requests into a string
我敢打赌,当我设置内容类型 header 时,Angular 会尝试提供帮助并为我对请求主体进行字符串化。当然没有GET
,因此错误。
关于angular - 无法使用 Angular 2 rc5 发出 http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38908973/