php - 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()
]);
}
解决方案
如果我正确地回答了您的问题,您的回答是呈现 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
我希望这是有帮助的。谢谢。
推荐阅读
- c# - 在 C# 中实现线程安全 Point3DCollection 的最佳方法
- python - Python中的随机数生成器
- javascript - WebExtension 访问加载的资源
- c - C 中的这个数组初始化器是什么?
- jenkins - 詹金斯列出詹金斯工作的构建数量
- javascript - 循环遍历对象,其中一些键具有相同的名称重复
- matplotlib - 直方图最后一个 bin 中的值相加
- mysql - MySQL查询以获取属于组织的所有用户
- amazon-web-services - 使用 terraform 从 AWS 迁移到 GCP
- ruby-on-rails - 在 Rails 代码中使用 SimpleCov 在 MiniTest 中获取所有错误和失败的测试用例