我用laravel写入后端。并尝试从IONIC使用@angular/http
调用api。API服务器始终响应“否”Access-Control-Allow-Origin'“
在后台服务器中,我已经在中间件和响应中添加了Access-Control-Allow-Origin
。
中间件。
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE')
->header('Access-Control-Allow-Credentials', true)
->header('Access-Control-Allow-Headers', 'Content-Type')
->header('Vary', 'Origin');
回应。
return response($data, 200)
->withHeaders([
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE',
'Access-Control-Allow-Credentials' => true,
'Access-Control-Allow-Headers' => 'Content-Type',
'Vary' => 'Origin',
]);
离子
url: any = 'http://myurl.local/api/';
headers = new Headers(
{
'Accept' : 'application/json',
'Content-Type' : 'application/json',
'Access-Control-Request-Methods' : 'POST'
});
options = new RequestOptions({ headers: this.headers });
login(username, password) {
let data = JSON.stringify({
username : username,
password : password
});
let fullUrl = this.url+'login';
return new Promise((resolve, reject) => {
this.http.post(fullUrl, data, this.options)
.toPromise()
.then((response) =>
{
console.log('API Response : ', response);
resolve(response.json());
})
.catch((error) =>
{
console.error('API Error : ', error.toString());
reject(error.json());
});
});
}
当我打电话API与'Content-Type' : 'application/json'
它总是响应误差。
XMLHttpRequest无法加载http://myurl.local/api/login。对 预检请求的响应未通过访问控制检查:否 “所请求的 资源上存在”Access-Control-Allow-Origin“标头。原因'http://localhost:8100'因此不允许 访问。
但是,如果我将'Content-Type'
更改为'application/x-www-form-urlencoded'
。我没有得到任何错误。
但是,当我尝试看输入$request->all()
。我得到的数据是'{"username":"XXXXXXXXXX","password":"XXXXXXXXXX"}' => NULL
。
与邮递员很好。我真的尝试了很多方法来解决这个问题,但是我做不到。
有什么不对?
在中间件或控制器? – ThunderBirdsX3
在你的中间件代码 – sideshowbarker
可能是我做错了什么?它有同样的问题。 ($ request-> getMethod()==“OPTIONS”){ $ headers = [ 'Access-Control-Allow-Methods'=>'公共函数句柄($ request,Closure $ next) POST,GET', 'Access-Control-Allow-Headers'=>'Content-Type' ]; 返回响应:: make('OK',200,$ headers); } return $ next($ request); }' – ThunderBirdsX3