【发布时间】:2021-09-20 05:20:32
【问题描述】:
我用来从中获取数据的 API 非常有限。我可以获取数据的唯一方法是通过 GET 请求传递我需要的记录的标识符。问题是我可能有多个需要数据的 ID。有没有一种有效的方法来循环请求并将 json 响应附加到 List 并将该 id 添加到该 JSON 中?
private static List<Question> getQuestions(string bearer, List<int> customerids)
{
//the example below passes the customer ID 1. What I want to do is pass customerids
var qq = new RestClient("https://server.test.net/api/customers/1/");
qq.AddDefaultHeader("Authorization", bearer);
var request = new RestRequest("questions");
var response = qq.Execute(request);
string rawResponse = response.Content;
List<Question> questions = JsonConvert.DeserializeObject<List<Question>>(rawResponse);
return questions;
}
我需要通过循环运行 API 调用(因此,如果客户 1、6、776 存在于 customerids 列表中,则调用它们)而不是当前将其设置为客户 1。然后我想将结果附加到rawResponse 连同客户 ID,因为它不存在于我拉回的数据中。
不幸的是,这可能不是运行它的最佳方式,并且与软件供应商就达到响应限制进行了多次对话,但这是我可以通过循环运行然后加入 customerid 来提取数据的唯一方法,因为它不存在在我拉回的数据中,即使我可以在 get 请求中使用它。
因此结果看起来像(其中客户 ID 不存在于响应中,但是通过在调用后从 customerids 列表传递并将所有 ID 附加到相同的响应数据集来添加:
| customerid | question id | answer |
|---|---|---|
| 1 | 43 | true |
| 6 | 76 | Married |
| 774 | 76 | Single |
问题类:
public class Question
{
public int QuestionID {get; set;}
public string answer {get; set;}
}
潜在的 foreach 需要一些帮助来为每个客户附加结果,并将关联的客户 ID 添加到结果中
foreach (var item in customerids)
{
var qq = new RestClient("https://system.test.net/api/customers/" + item + "/");
qq.AddDefaultHeader("Authorization", bearer);
var request = new RestRequest("questions");
var response = qq.Execute(request);
string rawResponse = response.Content;
}
【问题讨论】:
-
可以分享
Question类的代码吗?一位客户可以有多个问题吗? -
您是否尝试过使用 foreach 循环并将单个 customerid 传递给 URL 而不是
1? -
您好,感谢您的 cmets。我添加了 Question 类,虽然我确实有更多字段,但为了简单起见,只提供了主要的问题。是的,他们可能会给客户带来很多问题。
-
我也尝试了上面的 foreach,但是我将如何附加到每个客户的响应中?此外,我如何将客户 ID 作为另一个元素/字段添加到 rawresponse?
-
API 响应中没有customerid?您需要在循环外创建一个问题列表。如果
rawResponse是问题集合的 json,那么您应该将 json 反序列化为 List,然后使用 AddRange 方法将其添加到另一个列表中。
标签: c# json rest rest-client