0

我目前正在使用 Quizlet.com 的 API(一个在线抽认卡网站)为 Windows Phone 8 开发 C# 应用程序。

API 参考中记录的用于编辑抽认卡集的 API 调用之一要求您通过 PUT 方法发送一组术语和定义。

大概这样做你必须使用HttpWebRequest而不是WebClient,因为后者太简单并且据我所知不支持 PUT 请求。但是,我似乎无法理解如何将整个数组作为 PUT 请求的一部分发送

有人对如何做到这一点有任何想法吗?很抱歉,我没有要附加的源代码,但这可能没有必要,因为这是一个更普遍的问题。

提前致谢!


这是我当前使用的代码不起作用:

RestClient Edit = new RestClient("https://api.quizlet.com");
            RestRequest EditRequest = new RestRequest();
            EditRequest.AddParameter("term_ids[]", ID);
            EditRequest.AddParameter("terms[]", Terms);
            EditRequest.AddParameter("definitions[]", Definitions);
            EditRequest.AddParameter("title", item.Title);
            EditRequest.AddHeader("Authorization", "Bearer " + CurrentLogin.AccessToken);
            EditRequest.AddHeader("Host", "api.quizlet.com");
            EditRequest.Resource = "2.0/sets/" + item.Id;
            EditRequest.Method= Method.PUT;
            Edit.ExecuteAsync(EditRequest, Response =>
            {
                FinalizeUpdate(Response);
            });

我这样声明我的数组:

    int[] ID;
    string[] Terms;
    string[] Definitions;

我将数据添加到我的数组中(TermsList 是一个 ObservableCollection):

        foreach(Term i in TermsList)
        {
            ID[Counter] = i.Id;
            Terms[Counter] = i.Name;
            Definitions[Counter] = i.Definition;
            Counter++;
        }

下面是 Term 的类定义:

public class Term
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("term")]
    public string Name { get; set; }

    [JsonProperty("definition")]
    public string Definition { get; set; }

}
4

2 回答 2

0

该 API 是 RESTful,因此我建议尽可能使用外部库,例如 RestSharp。

从我在其他 API 的在线示例中可以看到,发送数组的方法只是再次发送相同的参数并使用不同的值。

即,使用 RestSharp 的 API,您可以:

client.AddParameter("imageData[]", data1);
client.AddParameter("imageData[]", data2);
于 2013-10-08T11:42:04.570 回答
0

以防万一其他人遇到这个问题,这是最终让 PUT 方法工作的代码:

            RestClient Edit = new RestClient("https://api.quizlet.com");
            RestRequest EditRequest = new RestRequest();

            foreach (var i in ID) 
            { 
                EditRequest.AddParameter("term_ids[]", i);
            } 
            foreach (var i in Terms)
            {
                EditRequest.AddParameter("terms[]", i);
            }
            foreach(var i in Definitions)
            {
                EditRequest.AddParameter("definitions[]", i);
            }

            EditRequest.AddParameter("title", item.Title);
            EditRequest.AddHeader("Authorization", "Bearer " + CurrentLogin.AccessToken);
            EditRequest.AddHeader("Host", "api.quizlet.com");
            EditRequest.Resource = "2.0/sets/" + item.Id;
            EditRequest.Method= Method.PUT;
            Edit.ExecuteAsync(EditRequest, Response =>
            {
                FinalizeUpdate(Response);
            });

我希望这有帮助!

于 2013-10-09T17:26:08.283 回答