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');
}
也许这会对某人有所帮助。
我想确定请求的内容类型 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');
}
也许这会对某人有所帮助。