Предотвращение преждевременной остановки цикла foreach
На прошлой неделе я опубликовал этот вопрос, на который был дан ответ, что API-интерфейс AtTask действительно имеет установленный лимит, и для его изменения необходимо использовать "$$LIMIT", как объясняется на сайте AtTask.
Это очень полезно, за исключением того, что я не уверен, куда поместить "$$LIMIT", так как я использую C#, а пример AtTask C# не включает это. Я искал сайт разработчика AtTask для решения и подходил с пустыми руками.
Как я могу использовать этот код в 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++;
}
1 ответ
Похоже, их API превращает объект, переданный второму параметру Search() в параметры строки запроса. Так в вашем примере
client.Search(ObjCode.PROJECT, new {groupID = userGroupID});
Будет создан следующий URL-адрес (123 представляет любой идентификатор вашей группы).
GET /attask/api/project/search?groupID=123
Таким образом, чтобы добавить $$LIMIT к URL, добавьте $$LIMIT к объекту. К сожалению, C# не допускает использование $ в именах. Поэтому я предлагаю немного изменить их C# API. Сначала измените ваш вызов на Search() на этот
client.Search(ObjCode.PROJECT, new {groupID = userGroupID, __Limit = 200 });
Затем в AtTaskRestClient.cs измените параметр ObjectToStringArray() в конце файла на следующий.
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.