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

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

我在 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) {

标签: php json laravel lumen


【解决方案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 中获取错误信息,您可以找出失败的原因。
      猜你喜欢
      • 2015-02-24
      • 2018-05-06
      • 2018-12-07
      • 2011-04-17
      • 2023-01-18
      • 2016-05-26
      • 1970-01-01
      • 2017-08-16
      • 2017-10-16
      相关资源
      最近更新 更多