PHP 苗条如何检查请求是否 application/json

PHP Slim how to check if a request is application/json

我想确定请求的内容类型 header 是 application/json,我如何使用 Slim 框架?

这是无效的:

$contentType = $app->request->getContentType();
if(strtolower($contentType)!="application/json")
            throw new AppException("Request must have application/json content type");

因为内容类型可以包含字符集信息等等...

您可以检查页眉而不是使用快捷方式

$cType = $app->request->headers('Content-Type');
if (strpos('application/json', $cType) !== false) {
    //is json
}

对于寻找适用于各种情况的解决方案的人来说,Illya Moskvin 是对的,在 geggleto 答案中转换了论点。 这是代码示例:

$contentType = $request->getContentType();
if (strpos($contentType, 'application/json') !== false) {
  //is json
}

您可以使用不区分大小写但性能较低的 stripos,或者将 strtolower 应用于 $contentType

我正在玩更新版本的 Slim 3,遇到了同样的问题。

这是一个对我有用的解决方案(来自特定控制器内部)

$request_type = $request->getHeader('CONTENT_TYPE');
    if($request_type[0] != 'application/json'){
        // throw error    
        return $response->withStatus(415)
            ->withHeader('Content-type', 'text/html')
            ->write('Only json content type accepted');
    }

也许这会对某人有所帮助。