【发布时间】:2020-11-06 15:09:30
【问题描述】:
我想寻求有关循环的帮助。
我的方法接收一个带有姓名和电子邮件地址的 JSON 字符串,它使用这个对象字符串传递给外部 API POST 请求。
我刚刚发现 API 一次只能处理 30 个项目,否则无法验证。
我想学习如何检查json字符串是否包含超过30个项目,如果是,则在调用api时一次处理30个项目。是否有可能获得该循环的示例?
我的方法目前执行以下步骤:
public ActionResult CreatePanelists(Parameters data)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
var webId = data.webId;
var jwt_token = JWTToken.GetJWTToken();
var panelists = JsonConvert.SerializeObject(data.panelists); <- this is the array
var client = new RestClient($"https://api/{webId}/panelists");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/json");
request.AddHeader("authorization", $"Bearer {jwt_token}");
request.AddParameter("application/json", $"{{\"panelists\": {panelists}}}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
return new JsonResult { Data = new { status = response.StatusCode, message = response.Content} };
}
任何帮助都会很棒。
非常感谢。
更新
我添加了示例代码,发现一些错误:
'index': a parameter or local variable cannot have the same name as a method type parameter
Syntax error, '=>' expected
Invalid expression term ')'
'item': a parameter or local variable cannot have the same name as a method type parameter
更新2
return 部分现在在抱怨,response 在循环中,return 无法访问
The name response does not exists in the current context.
return new JsonResult { Data = new { status = response.StatusCode, message = response.Content} };
UPDATE3
public ActionResult CreatePanelists(Parameters data)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
var results = new List<string>();
var webId = data.webId;
var jwt_token = JWTToken.GetJWTToken();
var batches = data.panelists
.Select((item, index) => new { item, index })
.GroupBy(t => t.index / 30)
.Select(g => g.Select(t => t.item))
.Select(batch => JsonConvert.SerializeObject(batch));
foreach (var batch in batches)
{
var client = new RestClient($"https://api/meetings/{webId}/panelists");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/json");
request.AddHeader("authorization", $"Bearer {jwt_token}");
request.AddParameter("application/json", $"{{\"panelists\": {batch}}}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
string JSON = JsonConvert.SerializeObject(response);
results.AddItem(JSON);
}
return new JsonResult { Data = results };
添加项目:
public static void AddItem<T>(this List<T> list, T item)
{
if (!list.Contains(item))
{
list.Add(item);
}
}
如果您对如何改进代码有任何建议,请告诉我
【问题讨论】:
-
您说您有接收 JSON 字符串的代码。但是您已经发布了创建 JSON 字符串的代码。它是哪一个?您只是在问如何检查
data.panelists的元素数量吗?
标签: c# arrays asp.net-mvc loops