gpt4 book ai didi

php - 如何为路由组中的所有请求设置 header

转载 作者:可可西里 更新时间:2023-11-01 00:55:50 25 4
gpt4 key购买 nike

我正在使用 Laravel 5.4 创建一个 API,它运行良好。我使用了以下中间件 => auth:api 像这样

Route::group(['middleware' => 'auth:api'], function(){ 
Route::get('URIValue', ControllerName@action) //Example
});

我已经用 postman 测试了它,当请求 header 包含以下键和值时它运行良好:

  • 授权:Bearer api_token
  • 接受:应用程序/json

当 api_token 无效时,将执行 Handler 类的未验证函数。 laravel 返回的默认响应是

'error' => 'Unauthenticated' // in JSON format

但是当没有设置 Accept header 时,laravel 默认返回一个 View 。但是对于 API, View 是 Not Acceptable 。

我如何强制 Laravel 为路由组中的路由的每个请求检查 Accept header 是否设置了正确的值(在这种情况下,值必须是 => accept/json)?

类似于:

protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->header('Accept' => 'application/json') //this
->group(base_path('routes/api.php'));
}

Route::group(['middleware'  => 'auth:api', 
'headers' => ['Accept' => 'application/json']
], function(){
Route::get('URIValue', ControllerName@action) //Example
});

最佳答案

您可以为此创建一个中间件。

你将检查并执行 Accept header ,这样 Laravel 无论如何都会输出 json..

class WeWantJson
{
/**
* We only accept json
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$acceptHeader = $request->header('Accept');
if ($acceptHeader != 'application/json') {
return response()->json([], 400);
}

return $next($request);
}
}

在您的 App\Http\Kernel 中,您可以将中间件添加到您的 api 组中。然后就不需要手动将它添加到路由/路由组中。


编辑:

您还可以添加一个中间件来强制执行 json,无论如何...

class EnforceJson
{
/**
* Enforce json
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$request->headers->set('Accept', 'application/json');

return $next($request);
}
}

关于php - 如何为路由组中的所有请求设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44453221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com