调用外部REST Api

时间:2016-09-13 13:33:36

标签: angular

我从Angular2应用程序调用外部rest API,我在响应中收到此错误:

Request header field X-XSRF-TOKEN is not allowed by Access-Control-Allow-Headers in preflight response.

当我无法控制服务器时,我能做些什么吗?

以下是我要做的事情:

    this._http.get('https://api-v3.mojepanstwo.pl/dane/wojewodztwa')
        .map(res=>res.json())
        .subscribe(
            success=>{
                console.log(success);
            }
        )

当我尝试在POSTMAN中对此endopint进行GET方法时,它可以正常工作。在Chrome中,它会引发上述错误。

这似乎只是Chrome的问题 - 它适用于Safari和Firefox。

当我使用jQuery获取响应时,它工作正常:

 $.get("https://api-v3.mojepanstwo.pl/dane/wojewodztwa", function(data){
      console.log(data);
  })

1 个答案:

答案 0 :(得分:4)

我的猜测是你有某种http拦截器,它会为你的所有(获取?)http请求添加X-XSRF-TOKEN。我刚试过它,如果我没有在我的请求标题中添加任何内容,这就像一个魅力:

getData() {
    return this.http.get('https://api-v3.mojepanstwo.pl/dane/wojewodztwa')
        .map(response => response = response.json());
}

ngOnInit() {
    this.appService.getData().subscribe(data => {
        this.data = data;
    });
}

但是,如果我向标头请求添加任何内容,我会得到与您相同的错误。例如,我刚刚添加了名为Something的标头和值Something

headers: Headers = new Headers({ 'Something': 'Something' });

getData() {
    return this.http.get('https://api-v3.mojepanstwo.pl/dane/wojewodztwa', {
        headers: this.headers
    })
        .map(response => response = response.json());
}

ngOnInit() {
    this.appService.getData().subscribe(data => {
        this.data = data;
    });
}

这将产生您获得的错误:

  

请求标头字段不允许   预检响应中的Access-Control-Allow-Headers。

为了清楚起见,我在Chrome中对此进行了测试。