防止这个foreach循环提前停止
本文关键字:循环 foreach | 更新日期: 2023-09-27 18:04:52
上周我发布了这个问题,这个问题的答案是,AtTask API确实有一个设置限制,要改变这一点,需要使用"$$ limit ",正如AtTask网站所解释的那样。
这是非常有用的,除了我不确定在哪里放"$$LIMIT",因为我正在使用c#和任务c#示例不包括这个。我一直在搜索任务开发人员网站寻找解决方案,但一直空手而归。
我如何在c#中使用这段代码来提高调用限制?
编辑上一个问题中包含的代码示例:
JToken projects = client.Search(ObjCode.PROJECT, new {groupID = userGroupID});
foreach (var j in projects["data"].Children())
{
Console.WriteLine("# " + counter + " Name: {0}", j.Value<string>("name"));
counter++;
}
看起来他们的API将传递给Search()的第二个参数的对象转换为查询字符串参数。在你的例子中
client.Search(ObjCode.PROJECT, new {groupID = userGroupID});
创建以下url(123代表您的组id)。
GET /attask/api/project/search?groupID=123
所以要在url中添加$$LIMIT,在对象中添加$$LIMIT。不幸的是,c#不允许使用$ in命名。所以我的建议是稍微修改一下他们的c# API。首先将对Search()的调用更改为
client.Search(ObjCode.PROJECT, new {groupID = userGroupID, __Limit = 200 });
然后,在AtTaskRestClient.cs中,将文件末尾的parameterObjectToStringArray()更改为以下内容:
private string[] parameterObjectToStringArray(object parameters, params string[] toAdd) {
var properties = parameters.GetType().GetProperties();
List<string> p = new List<string>(properties.Length);
p.AddRange(toAdd);
foreach(var prop in properties) {
string propName = prop.Name;
if (propName.StartsWith("__"))
{
propName = "$$" + propName.Substring(2);
}
string line = string.Format("{0}={1}", propName, prop.GetValue(parameters, null));
p.Add(line);
}
return p.ToArray();
}
这个改变也允许你使用其他以$$开头的参数,比如$$FIRST