我开始按照流行教程 here 学习如何正确使用 REST API
当尝试创建一个简单的 POST api 时,我不断遇到 400 错误,并且到目前为止我还没有在网上找到任何答案。
API如下:
$app->post('/test', function() use ($app) {
// check for required params
verifyRequiredParams(array('email'));
echo "Success";
});
它尝试使用此代码块验证“电子邮件”参数,与教程相同:
function verifyRequiredParams($required_fields) {
$error = false;
$error_fields = "";
$request_params = array();
$request_params = $_REQUEST;
// Handling PUT request params
if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
$app = \Slim\Slim::getInstance();
parse_str($app->request()->getBody(), $request_params);
}
foreach ($required_fields as $field) {
if (!isset($request_params[$field]) || strlen(trim($request_params[$field])) <= 0) {
$error = true;
$error_fields .= $field . ', ';
}
}
if ($error) {
// Required field(s) are missing or empty
// echo error json and stop the app
$response = array();
$app = \Slim\Slim::getInstance();
$response["error"] = true;
$response["message"] = 'Required field(s) ' . substr($error_fields, 0, -2) . ' is missing or empty';
echoRespnse(400, $response);
$app->stop();
}
}
该代码总是失败并显示 400 错误代码,因为 $_REQUEST 函数似乎返回一个空数组。知道可能出了什么问题吗?我正在运行 apache 的 ubuntu 服务器上进行开发。
Slim API 框架设置正确,因为我可以通过 Google 的高级 Rest 客户端调用一个非常简单的调用,该调用正确地回显响应。我肯定将正确的参数传递到 api 中。
更新:我还尝试直接从 api 运行 $_REQUEST 和 $_GET 函数,它只返回一个空字符串,如下所示:
Array
(
)
我想知道是否有某种 apache 配置文件阻止了这些函数的数据或其他内容?
最佳答案
可能的问题: 您是否仔细检查过您在请求 header 中选择的 Content-Type 是否正确? 我怀疑客户端正在感知从服务器端发送的格式错误的标记语言。
可能的解决方案: 将 Content-Type: application/x-www-form-urlencoded 更改为 application/JSON,反之亦然。
关于php - SLIM PHP api 400 错误 - $_REQUEST 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28349043/