Moodle rest post返回错误,其功能为core_user_get_users_by_field

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Moodle rest post返回错误,其功能为core_user_get_users_by_field相关的知识,希望对你有一定的参考价值。

嗨,我是moodle的新手,我在调用webservice时遇到错误。

目前我正在尝试使用以下函数core_user_get_users_by_field从moodle中检索用户,并且我正在使用rest服务来执行此操作。我已经设法创建一个用户,因此我通过身份验证使用该服务。

我收到的错误是

单个结构中缺少必需的键:字段

下面是用于创建用户的代码。我从错误中得到的问题是我需要为帖子发送的参数格式不正确。有谁知道如何使用此方法或任何其他方法正确搜索。

        String token = "token";

        String postData = "username=username";

        string createRequest = string.Format("http://domain/webservice/rest/server.php?wstoken={0}&wsfunction={1}&moodlewsrestformat=json", token, "core_user_get_users_by_field");

        // Call Moodle REST Service
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(createRequest);
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";

        // Encode the parameters as form data:
        byte[] formData =
            UTF8Encoding.UTF8.GetBytes(postData);
        req.ContentLength = formData.Length;

        // Write out the form Data to the request:
        using (Stream post = req.GetRequestStream())
        {
            post.Write(formData, 0, formData.Length);
        }


        // Get the Response
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Stream resStream = resp.GetResponseStream();
        StreamReader reader = new StreamReader(resStream);
        string contents = reader.ReadToEnd();

        // Deserialize
        javascriptSerializer serializer = new JavaScriptSerializer();
        if (contents.Contains("exception"))
        {
            // Error
            MoodleException moodleError = serializer.Deserialize<MoodleException>(contents);
        }
        else
        {
            // Good

        }
答案

webservice core_user_get_users_by_field需要一个以参数形式给出的关联数组,其中包含以下键:值 'field':'id' 'values':整数数组(必须是一个数组,可能只有一个值)

在PHP中,它将是,例如:

$parameters = array('field' => 'id', 'values' => array(13)); 

这意味着:'id'的值为13的用户。当然,您也可以使用其他参数:('field'=>'lastname','values'=> array('Smith')) 您可以选择的参数是Moodle'用户'表的字段。 尝试在postData变量中构建这些参数。

另一答案

这里的URL与我把这个url放在邮递员中并将http方法设置为post方法

hostname/webservice/rest/server.php?wstoken=any_token&wsfunction=core_user_get_users_by_field&field=email&values[0]=h@fci.com
&moodlewsrestformat=json

以上是关于Moodle rest post返回错误,其功能为core_user_get_users_by_field的主要内容,如果未能解决你的问题,请参考以下文章

Restful WCF 服务 POST 方法在 fiddler2 中返回 HTTP400 错误

WCF REST的POST时候报400错误是怎么回事

WCF REST 服务为 POST 返回 405

Firebase 动态链接 REST API 返回 400 错误请求

在Struts2 RESTful插件POST请求中返回响应

Moodle上传scorm错误