即使所有中间件都被注释掉,Laravel5.3API路由也会重定向
我正在用一个新的Laravel 5.3应用程序编写一个RESTful API 我在即使所有中间件都被注释掉,Laravel5.3API路由也会重定向,laravel,rest,laravel-5,url-redirection,postman,Laravel,Rest,Laravel 5,Url Redirection,Postman,我正在用一个新的Laravel 5.3应用程序编写一个RESTful API 我在routes/api.php中定义了一个资源,如下所示: Route::resource('/simple-path', 'Api\ControllerName'); 没有在路由本身上添加任何中间件,也没有在该控制器的构造函数中添加任何中间件,也没有在任何父控制器/类中添加任何中间件 然而,Laravel(?)不断地将302重定向到/,而不是GET,我想弄清楚为什么。即使我注释掉了app/Http/Kernel.
routes/api.php
中定义了一个资源,如下所示:
Route::resource('/simple-path', 'Api\ControllerName');
没有在路由本身上添加任何中间件,也没有在该控制器的构造函数中添加任何中间件,也没有在任何父控制器/类中添加任何中间件
然而,Laravel(?)不断地将302重定向到/
,而不是GET
,我想弄清楚为什么。即使我注释掉了app/Http/Kernel.php
中的所有中间件,只要我在curl或PostMan中运行一个对/simple path
的简单POST调用,它仍然会重定向
现在,请不要误解我的意思,我希望在我的api上安装auth:api
中间件,特别是对于POST或PUT请求,但我无法找出当没有任何中间件运行时(据我所知),是什么导致它重定向
我已经阅读了所有关于中间件的文档。我想知道除了中间件之外是否还有其他原因导致了这种情况?这是一个相当新的应用程序,因此我与基本安装相比没有太大变化。在这里回答我自己的问题。重定向不是由于中间件,而是由于
FormRequest
。我在控制器类的store()
函数中创建了FormRequest
子类,这导致它首先运行rules()
进行验证。当它看到一个必填字段丢失时,FormRequest
类通过自己的response()
方法重定向。因此,我只是将其添加到我的FormRequest
子类中(目前):
要修复此重定向,只需在从rest客户端调用LaravelAPI路由时将头参数“Accept”设置为“application/json”,它就可以正常工作。您是否扩展了一个使用控制器级中间件的控制器?(因此在控制器方法中)如果您放入routes/api.php
Route::post('/test',function(){return response([“message”=>“test”]],200);})
并尝试发布到http://yourpath.com/api/test
你有什么收获吗?因为您应该得到正确的响应。如果您删除了中间件,那么它将完美地工作,不会出现任何错误?只需执行“php artisan route:list”并检查post和put方法使用的控制器?@AfikDeri您的测试成功,这让我意识到我的控制器动作是类型暗示一个FormRequest子类,我之前很快建立了这个子类,它似乎正在触发它。我在其中一个参数上有一个“必需”的验证规则,当我删除所有“必需”的验证规则时,请求不再重定向!兄弟,我对同样的重新定向有些怀疑。你能加入我的聊天室吗?chat.stackoverflow.com/rooms/135960/laravelin 100年来,我从未想过会发生这样的事情,这挽救了我的一天;-)
use Illuminate\Support\Facades\Response;
public function response(array $errors)
{
return Response::json($errors, 400);
}