首页 > 解决方案 > 在 laravel 中使用错误的 ttp 请求类型(例如 get 而不是 post)时返回 404

问题描述

我正在开发一个休息 API,有时前端调用一个带有错误 HTTP 请求类型的端点。例如,我有一条路线 ( /users/unassigned),路线的类型是“GET”。想象一下我的前端使用“POST”请求调用此路由。发生以下错误。
The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, DELETE.
我想要的是 API 在这些情况下响应 JSON,我可以处理异常。

我已经使用了Route::fallback但是这个方法捕获了路由的每一个异常。我需要一个只处理被告知问题的函数。

标签: laravelrestapirouteshttprequest

解决方案


一种方法是处理它app/Exceptions/Handler.php

public function render($request, Exception $e)
{
    if ($request->ajax() || $request->wantsJson()) {
        return response()->json([
            'error' => $e->getMessage(),
        ], 400);
    }

    return parent::render($request, $e);
}

当请求由 ajax 或请求期望 json 发出时,这会将所有异常的错误消息输出为 json。

您还可以添加对异常类型的检查,如下所示:

if ($exception instanceof MethodNotAllowedHttpException) {
    // Code...
}

推荐阅读