按照建议创建中间件亚历山大·利希特 https://twitter.com/TheAlexLichter/status/969879256271597568这设置了Accept
每个请求的标头:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class ForceJsonResponse
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$request->headers->set('Accept', 'application/json');
return $next($request);
}
}
将其添加到$routeMiddleware
in the app/Http/Kernel.php
file:
protected $routeMiddleware = [
(...)
'json.response' => \App\Http\Middleware\ForceJsonResponse::class,
];
您现在可以包装所有应返回 JSON 的路由:
Route::group(['middleware' => ['json.response']], function () { ... });
编辑:对于 Laravel 6.9+
给json.response
中间件优先于其他中间件 - 处理请求被其他中间件终止的情况(例如Authorize
中间件),然后再设置Accept
header.
为此 - 重写你的构造函数App\Http\Kernel
class (app/Http/Kernel.php
) with:
public function __construct( Application $app, Router $router ) {
parent::__construct( $app, $router );
$this->prependToMiddlewarePriority(\App\Http\Middleware\ForceJsonResponse::class);
}