重定向“此路线不支持该方法”

时间:2019-08-15 08:03:31

标签: laravel routes

我有一个API终结点,用户可以将其发布到

Route::post('report', 'Auth\ReportController@report')

因为它仅支持POST请求,所以如果用户转到mydomain.com/api/report,则会收到错误消息

  

此路由不支持GET方法。

我不希望用户能够在其地址栏中键入此内容并收到此错误。因此,我获得了重定向到首页的信息

 Route::get('report', function () {
    return redirect('home');
});

这是处理此问题的正确方法吗?有没有更优雅的解决方案?另外,是否可以列出多条路线并将它们全部重定向到首页,例如:

 Route::get(['report', 'issuer'], function () {
        return redirect('home');
    });

2 个答案:

答案 0 :(得分:1)

更优雅:

Route::permanentRedirect('/report', '/home');

更好的方法可能是为您的API使用API​​路由,如果将您的API路由放置在route / api.php中,它将自动为它们添加/ api / [route]

前缀

要将路由列表重定向到本地,请在底部使用通配符路由,然后在控制器中定义重定向。

答案 1 :(得分:0)

我强烈建议您不要使用它,因为对于不允许使用API​​的方法的405消息对API使用者和许多人都非常有用。

但是,如果必须执行此操作,建议您使用异常处理程序

App\Exceptions\Handler(可在https://github.com/laravel/laravel/blob/master/app/Exceptions/Handler.php中看到laravel随附的样板)

use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;


class Handler extends ExceptionHandler
{
    public function render($request, Exception $exception)
    {
        if (!$request->expectsJson() && $exception instanceof MethodNotAllowedHttpException) {
            return redirect('home');
        } 

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

这将导致所有MethodNotAllowedHttpException都重定向到首页。

请注意,我还使用条件!$request->expectsJson(),因为期望JSON的客户端通常不希望知道重定向,而是希望收到真实状态代码的通知