Glo*_*ire 7 php api json laravel-5 laravel-5.4
我正在使用 Laravel 5.4 创建一个 API,并且一切正常。我使用了以下中间件 => auth:api 这样
Route::group(['middleware' => 'auth:api'], function(){
Route::get('URIValue', ControllerName@action) //Example
});
Run Code Online (Sandbox Code Playgroud)
我已经用邮递员对其进行了测试,当请求标头包含以下键和值时,它运行良好:
当 api_token 无效时,将执行 Handler 类的未经身份验证的函数。laravel 返回的默认响应是
'error' => 'Unauthenticated' // in JSON format
Run Code Online (Sandbox Code Playgroud)
但是当没有设置 Accept 头时,laravel 默认返回一个视图。但是对于 API,视图是不可接受的。
如何强制 laravel 为路由组中的路由的每个单个请求检查 Accept 标头是否设置了正确的值(在这种情况下,该值必须是 => accept/json)?
就像是:
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->header('Accept' => 'application/json') //this
->group(base_path('routes/api.php'));
}
Run Code Online (Sandbox Code Playgroud)
或者
Route::group(['middleware' => 'auth:api',
'headers' => ['Accept' => 'application/json']
], function(){
Route::get('URIValue', ControllerName@action) //Example
});
Run Code Online (Sandbox Code Playgroud)
Rob*_*ert 11
您可以为此创建一个中间件。
您将检查并强制执行 Accept 标头,以便 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);
}
}
Run Code Online (Sandbox Code Playgroud)
而在你的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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11562 次 |
| 最近记录: |