在C#中将数组作为PUT方法的一部分发送

时间:2013-10-08 11:06:14

标签: c# arrays windows-phone-8 httpwebrequest put

我目前正在使用Quizlet.com的API(一个在线flashcard网站)开发一个用于Windows Phone 8的应用程序。

其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++;
        }

以下是术语的类定义:

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

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

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

}

2 个答案:

答案 0 :(得分:1)

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

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

即,使用RestSharp的API你会这样做:

client.AddParameter("imageData[]", data1);
client.AddParameter("imageData[]", data2);

答案 1 :(得分: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);
            });

我希望这有帮助!