【发布时间】: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) {