如何循环 RestClient 请求传递 id 然后附加到响应
Posted
技术标签:
【中文标题】如何循环 RestClient 请求传递 id 然后附加到响应【英文标题】:How to loop RestClient request passing id and then appending to response 【发布时间】: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根据上面的cmets,你已经基本解决了。
我认为唯一尚未解决的部分是如何将 customerid 分配给 API 返回的问题。
从 API 收到 JSON 后,应将其反序列化为问题列表,然后将 CustomerId 分配给列表中的每个问题。
您可以使用 SELECT LINQ 方法或遍历问题列表。
在下面的代码中,我使用了SELECT LINQ方法。
public class Question
public int CustomerId get; set;
public int QuestionId get; set;
public string Answer get; set;
private static List<Question> GetQuestions(string bearer, List<int> customerids)
var list = new List<Question>();
// Create RestClient with base address.
var restClient = new RestClient("https://server.test.net/api");
// Add authorization header.
restClient.AddDefaultHeader("Authorization", bearer);
// Loop thru customerids
foreach (var customerid in customerids)
// Create RestRequest with URL for each customerid.
var request = new RestRequest($"api/customers/customerid/questions", Method.GET);
var res = restClient.Execute(request);
var content = res.Content;
// Deserialize response to a list of Questions.
// here I am assuming that the JSON returned from the API is for a list of Questions.
var questions = JsonConvert.DeserializeObject<List<Question>>(content);
// Creating new list of Questions with customerid assigned to them.
// Here I am assuming that the JSON from the API does not have customerId value in it.
questions = questions.Select(q => new Question Answer = q.Answer, QuestionId = q.QuestionId, CustomerId = customerid ).ToList();
// Add questions to the list to be returned.
list.AddRange(questions);
return list;
希望这能帮助您解决问题。
【讨论】:
非常感谢,您帮了我很大的忙,而且我学会了在 API 调用中对需要更改的数据使用 LINQ。我是 C# 新手,非常感谢所有帮助。赞成:)以上是关于如何循环 RestClient 请求传递 id 然后附加到响应的主要内容,如果未能解决你的问题,请参考以下文章
restclient火狐插件 以post方式请求,多个请求参数该怎么写
restclient,微信小程序请求sessionID不一样导致取不到指定session的解决办法
如何使用火狐下的两款接口测试工具RESTClient和HttpRequester发送post请求!
如何使用火狐下的两款接口测试工具RESTClient和HttpRequester发送post请求