Предотвращение преждевременной остановки цикла 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.

Другие вопросы по тегам