防止这个foreach循环提前停止

时间:2015-07-27 18:24:35

标签: c# foreach attask

上周我发布了this个问题,答案是AtTask API确实有一个设定的限制,并且要更改它," $$ LIMIT"需要使用,如AtTask site所述。

这是非常有用的,除了我不确定在哪里放置" $$ 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 个答案:

答案 0 :(得分:0)

看起来他们的API将传递给Search()的第二个参数的对象转换为查询字符串参数。所以在你的例子中

client.Search(ObjCode.PROJECT, new {groupID = userGroupID});

创建以下网址(123代表您的网址ID)。

GET /attask/api/project/search?groupID=123

所以要将$$ LIMIT添加到url add $$ LIMIT到对象。不幸的是,C#不允许名字中的$。所以我的建议是稍微修改他们的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。