我只想在我的IONIC 2项目中进行http post调用。当我运行离子服务时,它运行正常。但当我运行离子运行anroid 在我的设备上运行它时,它会给我403(禁止)响应。
这是我的PaymentService.ts,其中已经进行了http调用
import {Http, Headers, RequestOptions} from '@angular/http';
import 'rxjs/add/operator/map';
import { Injectable } from '@angular/core';
@Injectable()
export class PaymentService {
static get parameters() {
return [[Http]];
}
constructor(private http:Http) {}
postToPaymentApi(data) {
let headers: Headers = new Headers()
headers.set('Content-type', 'application/x-www-form-urlencoded')
let options = new RequestOptions({headers: headers})
var response = this.http.post("http://test/url",data,options).map(res => res.json());
return response;
}
}
}
为了克服这个问题,我尝试了几件事,比如
<meta http-equiv="Content-Security-Policy" content="default-src *; img-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
<access origin>
添加为具有指定属性的*,<allow-navigation>
,<allow-intent>
标记。但在我的情况下,没有上述解决方案正在发挥作用。
当我从我的Android设备点击后调用时,我收到以下错误响应:
{"_body":"",
"status":403,
"ok":false,
"statusText":"Forbidden",
"headers":{"Date":["Wed","30 Nov 2016 09:28:53 GMT"],
"Content-Length":["0"]},
"type":2,
"url":"http://test/url"}
我有以下离子信息:
Cordova CLI: 6.4.0
Ionic Framework Version: 2.0.0-rc.3
Ionic CLI Version: 2.1.12
Ionic App Lib Version: 2.1.7
Ionic App Scripts Version: 0.0.45
ios-deploy version: Not installed
ios-sim version: Not installed
OS: Linux 4.4
Node Version: v7.2.0
Xcode version: Not installed
有解决方案的人吗?
提前致谢。
答案 0 :(得分:0)
你能试试这个例子吗?您确定要发送正确的标题吗
postToPaymentApi(data) {
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
return new Promise(resolve => {
this.http.post('http://test/url',data, {headers: headers })
.subscribe(respond => {
console.log(respond);
});
});
}
答案 1 :(得分:0)
我在这里遇到同样的错误,我发现这是因为当您运行离子服务时,请求来源以&#34; http://&#34;或&#34; https://&#34;在离子运行android 上,它以&#34; file:///&#34;开头。
要解决此问题,您需要更改服务器端CORS过滤器以识别&#34; file ///&#34;请求:
Access-Control-Allow-Origin: *