2 回答
![?](http://img1.sycdn.imooc.com/54584d1300016b9b02200220-100-100.jpg)
TA贡献1900条经验 获得超5个赞
问题已解决,原因是:
dingo/api 组件影响了原本的请求响应
解决思路:
从响应来看,返回的状态码是200,说明
预检请求
已经到达了服务器,只不过被服务器断否认掉了这里我饶了很大个弯子,以为
预检请求
被否就意味着后端配置错误,所以一直在检查前后端的配置,但是都没起作用吃个饭回来觉得还是从这个option请求入手,得先让他通过,尝试着单独写一个路由去匹配这个请求,并返回相应的请求头
Route::options('api/user/12',function(){ return response('ok') ->header('Access-Control-Allow-Methods','POST, GET, OPTIONS, PUT, DELETE') ->header('Access-Control-Allow-Headers','Content-Type, X-Auth-Token, Origin'); })->middleware('crouss.request');
单独请求居然成功了。难道是自定义的中间除了问题?然后我单独在中间去做响应处理,结果没有得到响应
这说明在我这个路由中间件之前肯定发生了些什么,那就肯定只有dingo/api了
说来也巧,在看别人怎么解决laravel cros的时候,发现他们在使用一个
barryvdh/laravel-cors
的包,我原本想着如果我自定义的中间件不能用,只能借用它的啦。在分析这个包的同时,我发现有使用者配置的时候提出一个坑,需要将这个包作为中间件写在dinggo/api的配置文件中,恍然大悟
答案:在dingo/api配置文件config/api.php中加入中间件
` 'middleware' => [
'crouss.request' => \App\Http\Middleware\EnableCrossRequestMiddleware::class, ],`
===========================================================
![?](http://img1.sycdn.imooc.com/545845d30001ee8a02200220-100-100.jpg)
TA贡献1784条经验 获得超8个赞
我之前也遇到过,google了很多。
自定义middleware是没办法解决的,你要把他写在routes/api.php或routes/web.php的头部才可以。
![?](http://img1.sycdn.imooc.com/545864000001644402200220-100-100.jpg)
TA贡献1831条经验 获得超4个赞
查看laravel-cors的包的源码就发现了,哪里有$response->header方法?是$response->headers->set吧
- 2 回答
- 0 关注
- 586 浏览
添加回答
举报