我目前正在使用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; }
}
答案 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);
});
我希望这有帮助!