我正在使用新的Laravel 5.3应用程序编写RESTful API。
我有routes/api.php
中定义的资源,如此:
Route::resource('/simple-path', 'Api\ControllerName');
路由本身没有添加中间件,也没有在该控制器的构造函数中添加任何中间件,也没有在任何父控制器/类中添加任何中间件。
但是,对于/
之外的任何HTTP动词,Laravel(?)保持302重定向到GET
,我正在驾驶自己疯狂试图找出原因。即使我在app/Http/Kernel.php
中注释掉所有中间件,只要我在curl或PostMan中对/simple-path
进行简单的POST调用,它仍会重定向。
现在,不要误解我的意思,我想要我的api上的auth:api
中间件,特别是对于POST或PUT请求,但我无法弄清楚导致它的原因在没有任何中间件运行的时候重定向(据我所知)。
我已经阅读了所有可以找到的中间件文档。我想知道除了中间件之外还有什么可能导致这种情况吗?这是一个相当新鲜的应用程序,所以我没有从基本安装中做太多改变。
答案 0 :(得分:1)
要修复此重定向,只需在从其他客户端调用laravel api路由时将头参数“Accept”设置为“application / json”,它就能正常工作。
答案 1 :(得分:0)
在这里回答我自己的问题。重定向不是由于中间件,而是由于FormRequest
。我是在我的控制器类的FormRequest
函数中提示我创建的store()
子类的类型,这导致它首先运行rules()
进行验证。当它看到缺少必填字段时,FormRequest
类通过自己的response()
方法重定向。所以我只是将它添加到我的FormRequest
子类(现在):
use Illuminate\Support\Facades\Response;
public function response(array $errors)
{
return Response::json($errors, 400);
}