如何为路由组中的所有请求设置标头

荣耀

我正在使用Laravel 5.4创建API,并且一切正常。我已经使用了以下中间件=> auth:api

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

我已经用邮递员对其进行了测试,当请求标头包含以下键和值时,它可以很好地工作:

  • 授权方式:承载者api_token
  • 接受:application / json

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

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

但是,如果未设置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'));
}

要么

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

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

您将检查并强制执行A​​ccept标头,以便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);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为Ionic 2中的所有请求设置默认的Http标头?

为Flutter HTTP请求中的所有请求设置默认标头的最佳方法

使用AngularJs从响应中检索标头并在所有请求上进行设置

为Angular中除OPTIONS之外的所有请求设置默认标头

UnityWebRequest如何打印所有请求标头

如何用所有请求标头填充字典

如何用 JavaScript 中的 XMLHttpRequest 替换所有请求中的标头令牌?

如何在Django中获取所有请求标头?

如何在Go中获取所有请求标头

如何为Java / Kotlin / Android中的所有请求设置gRPC客户端超时

如何为带有wreq的请求设置HTTP标头?

springframework获取所有请求标头

将标头添加到所有请求

所有请求的Node.js静态标头

如何使用Retrofit为所有请求定义标头?

CloudFront-如何将所有请求标头转发到源

如何在Angular2中的所有请求的请求标头中发送“ Cookie”?

如何为ext5中的每个ajax请求设置通用请求标头?

jmeter捕获单个HTTP请求触发的所有请求和响应标头

NGINX没有将所有请求标头传递给Tomcat

如何在puppeteer中设置标题只是主页请求而不是所有请求

仆人:查看所有请求头

向所有请求添加额外的标头(对Tomcat来说是成角度的)

Okhttp3:将全局标头添加到所有请求错误

所有请求的AngularJS $ http自定义标头

使用Retrofit 2向所有请求添加标头

使用tampermonkey获取与页面相关的所有请求的标头

RestKit是否为所有请求添加自定义标头?

Chrome将奇怪的HTTPS:1标头添加到所有请求