首页 > 解决方案 > Laravel 8 API 返回 HTML 而不是 JSON

问题描述

我正在使用 Laravel 和 Vue 开发一个简单的网站,代码在 Homestead 中运行。当用户访问网站的主页时,视频以网格形式显示。因此调用 API 来获取数据,我得到的返回是 .view 文件的 HTML 而不是 JSON。

// API Routes in Api.php
Route::get('/videos', [VideoController::class, 'getVideos']);
Route::get('/videos/{id}', [VideoController::class, 'getVideo']);
Route::post('/user/login', [AuthController::class, 'login']);
Route::post('/user/check', [UserController::class, 'checkUser']);

// Controller function that returns data from website via ORM
public function getVideos(): JsonResponse{
    return resonse()->json([
        "response" => Video::all()
    ]);
}

调用 API 时得到的控制台响应 在此处输入图像描述

PHP工匠路线:列表 在此处输入图像描述

标签: phplaravel

解决方案


如果我正确地回答了您的问题,您的回答是呈现 Html 而不是 JSON?

您可以创建一个全局 JsonMiddleware,它接受标头作为 application/json。为此,请执行以下步骤:

第一步:新建中间件

php artisan make:middleware JsonMiddleware

第 2 步:复制此代码并将其放在 JsonMiddleware 中的句柄方法中,然后再 'return $next($request);'

$request->headers->set("Accept", "application/json");

您的最终结果应如下所示:

public function handle(Request $request, Closure $next)
{
    $request->headers->set("Accept", "application/json");
    return $next($request);
}

第 3 步:转到 App\Http\Kernel.php 文件并将以下代码添加到全局 HTTP 中间件堆栈。

protected $middleware = [
    \App\Http\Middleware\JsonMiddleware::class,
    // Other Middleware::class comes after...
];

第 4 步:清除应用程序配置缓存并转储自动加载

php artisan config:cache or composer dump-autoload

我希望这是有帮助的。谢谢。


推荐阅读