Accept 这个头非常重要,决定了响应返回的格式,设置为 application/json
你遇到的所有报错,Laravel 会默认帮你处理为 Json 的格式。
但是这个头必须是客户端进行接口调用的时候设置,当有些时候客户端无法正确设置的时候,有没有办法默认就返回 Json 格式的响应呢。
其实我们可以添加一个中间件,给所有的 API 路由手动设置一下。
$ php artisan make:middleware AcceptHeader
app/Http/Middleware/AcceptHeader.php
<?php
namespace App\Http\Middleware;
use Closure;
class AcceptHeader
{
public function handle($request, Closure $next)
{
$request->headers->set('Accept', 'application/json');
return $next($request);
}
}
代码非常简单,就是给请求添加一个 Accept 的头。
app/Http/Kernel.php
.
.
.
protected $middlewareGroups = [
'web' => [
.
.
.
],
'api' => [
\App\Http\Middleware\AcceptHeader::class,
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
.
.
.
最后在 api 中间件组中添加上这个中间件即可。
修改路由,抛出一个 403 错误测试一下。
routes/api.php
Route::prefix('v1')->name('api.v1.')->group(function() {
Route::get('version', function() {
abort(403, 'test');
return 'this is version v1';
})->name('version');
});
访问 xxxx.test/api/v1/version 。
现在在客户端无法正确设置 Accept 头的时候也能正常工作了,但是还是推荐所有客户端正确设置 Accept 头。