Moodle REST Web 服务:将数组作为 POST 参数发送时出现问题

Moodle REST webservice: Problems sending an array as POST parameter

本文关键字:参数 问题 POST 服务 Web REST 数组 Moodle      更新时间:2023-10-16

我正在使用Moodle REST网络服务与Qt结合使用。 登录有效,其他具有单个参数的功能也可以工作。

现在我想使用函数"core_user_update_users",它将数组作为参数。

官方文件说:

一般结构:

list of ( 
object {
id int   //ID of the user
username string  Optional //Username policy is defined in Moodle security config.
... //more optional strings
customfields  Optional //User custom fields (also known as user profil fields)
list of ( 
object {
type string   //The name of the custom field
value string   //The value of the custom field
} 
)preferences  Optional //User preferences
list of ( 
object {
type string   //The name of the preference
value string   //The value of the preference
} 
)} 
)

和:

休息(开机自检参数)

 users[0][id]= int 
 users[0][username]= string //optional
 //many more parameters, but all optional like above


所以我认为这将是我的HTTP请求:

auto NetworkPostRequest = QNetworkRequest(QUrl("http://XXX.XXX.XXX.XXX/webservice/rest/server.php?wstoken=XXXXXXXXX&moodlewsrestformat=json&wsfunction=core_user_update_users" ));
NetworkPostRequest.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
QByteArray Data;
Data.append("users[0][id]=12");
Data.append("&users[0][firstname]=QtTestname");
this->NetworkAccessManager->put(NetworkPostRequest, Data);



但是我从moodle收到以下调试消息:

{
    "debuginfo": "Missing required key in single structure: users",
    "errorcode": "invalidparameter",
    "exception": "invalid_parameter_exception",
    "message": "Invalid parameter value detected"
}


显然数据有问题,但我无法弄清楚。希望这里有人可以提供帮助。

解决方案是在数据的第一个附加项中添加"&"。

QByteArray Data;
Data.append("&users[0][id]=12");
Data.append("&users[0][firstname]=QtTestname");
this->NetworkAccessManager->put(NetworkPostRequest, Data);

没有数组作为参数的 Moodle 函数并不关心这一点,所以直到现在它才引起我的注意。