Laravel:忽略 412 错误页面

Posted

技术标签:

【中文标题】Laravel:忽略 412 错误页面【英文标题】:Laravel: Ignore 412 error page 【发布时间】:2017-01-12 19:16:00 【问题描述】:

必须有一个非常简单的解决方案,但我不知道如何在 Google 或 *** 中搜索它,所以,是的,到目前为止我没有找到任何东西。

我在 Lumen 中编写了一个简单的 API 路由,它在验证失败时返回一个包含 421 的 json 字符串:

    "code": 412,   "status": "error",   "data": "validation failed" 

现在我想在另一个 Laravel 项目中调用该路由,但是我得到一个巨大的 错误 页面,而不是来自 API 的 JSON 字符串:

客户端错误:POST http://www.serellyn.net/development/game_api/public/platforms

导致412 Precondition Failed 回复:

"code":412,"status":"error","data":"validation failed"

我确实认为这是非常正常的行为,因为 Laravel 在其响应中看到了错误。但我想做的就是接收我自己的带有 412 错误代码的 json 字符串,并能够继续使用我的网页。

我该如何解决这个问题? 提前谢谢你。

编辑:忘记添加一些代码。我使用 Guzzle 调用我的 API。

$client = new Client(['base_uri' => 'http://www.serellyn.net/development/game_api/public/', 'auth' => array('dev', '<dev>2016')]);
        $res = $client->request('POST', 'platforms', array('form_params' => ['name' => $request->name]));
        if($res->getStatusCode() == 201) 
            Session::flash('success', $request->name . ' successfully added');
         else 

        
        return redirect()->route('platforms.add.get');

【问题讨论】:

你能贴出你用来调用api的代码吗? @AmirBar,对此感到抱歉。我一开始想添加它,我忘了:) @AmirBar 检查我的编辑:) 查看 Exceptions docs.guzzlephp.org/en/latest/quickstart.html#exceptions 下的文档@“如果 http_errors 请求选项设置为 true,则会针对 400 级错误抛出 GuzzleHttp\Exception\ClientException” 所以最终的答案是: $res = $client->request('POST', 'platforms', array('http_errors' => false,'form_params' => ['name' = > $request->name])); if($res->getStatusCode() == 201) 【参考方案1】:

有同样的问题,但在一个网站上,我只是在 apache 服务器上重写了我的 mod_security 模块,它再次与 ssl 一起工作得很好。你可以阅读更多here

【讨论】:

【参考方案2】:

问题是如果 http_errors 请求选项设置为 true,Guzzle 会抛出 400 级错误的异常。 (这是默认值)

您需要在请求中输入'http_errors' =&gt; false,例如:

$client->request('POST', 'platforms', array('http_errors' => false,'form_params' => ['name' => $request->name])); if($res->getStatusCode() == 201) 

http_errors docs

【讨论】:

【参考方案3】:

我认为答案是正确的。我要做的是在 try-catch 块中捕获错误,然后继续我想要的。

【讨论】:

但是我不能使用我在 JSON 中返回的内容,对吧?因为 API 进行验证,所以如果验证失败,我想知道哪个验证失败并且在我的 API 中处理,然后在 JSON 中返回。 当然可以。您应该将错误消息与错误一起发送。在 try-catch 中从 Exception 中获取错误信息,您可以找出失败的原因。

以上是关于Laravel:忽略 412 错误页面的主要内容,如果未能解决你的问题,请参考以下文章

登录laravel后页面刷新时419页面过期错误

Laravel-8 .删除帖子时出现 404 错误页面

Laravel 5上未显示自定义错误页面

Laravel 404错误,Laravel根目录可以访问,非根目录就会出现404 页面找不到的错误

Laravel 单元测试显示完全错误

Laravel 5刀片在出现错误而不是抛出异常时显示空白页面