Разрешить только тип содержимого json в запросах POST в laravel - PullRequest
1 голос
/ 07 мая 2020

Я создаю laravel API, и мне нужно иметь возможность принимать запросы типа «application / json» только при публикации данных. Любые другие типы содержимого должны возвращать ответ 406 «Неприемлемо».

Я знаю, что могу установить промежуточное программное обеспечение, чтобы проверить это, однако мне было интересно, есть ли лучший способ сделать это?

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Используйте это промежуточное ПО:

class WeWantJsonMiddleware
{
    /**
     * We only accept json
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!$request->isMethod('post')) return $next($request);


        $acceptHeader = $request->header('Accept');
        if ($acceptHeader != 'application/json') {
            return response()->json([], 406);
        }

        return $next($request);
    }
}

(модификация { ссылка })

И добавьте его в App\Http\Kernel к $middleware, чтобы проверять каждый отправить запрос. Если вы хотите только проверить запрос сообщений API, просто введите его в $middlewareGroups['api'].

0 голосов
/ 05 августа 2020

Вот мои два цента:

class JsonMiddleware
{
    /**
     * Accept JSON only
     *
     * @param Request $request
     * @param Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $header = $request->header('Accept');
        if ($header != 'application/json') {
            return response(['message' => 'Only JSON requests are allowed'], 406);
        }

        if (!$request->isMethod('post')) return $next($request);

        $header = $request->header('Content-type');
        if (!Str::contains($header, 'application/json')) {
            return response(['message' => 'Only JSON requests are allowed'], 406);
        }

        return $next($request);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...