Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过AtTask RESTful API获取和分页所有数据_C#_Rest_Attask_Workfront Api - Fatal编程技术网

C# 通过AtTask RESTful API获取和分页所有数据

C# 通过AtTask RESTful API获取和分页所有数据,c#,rest,attask,workfront-api,C#,Rest,Attask,Workfront Api,我试图向AtTask RESTful API发出Get请求,以获取1000个项目对象。ATask给出了一些关于如何做到这一点的提示。我需要对我要请求的对象的数量进行分页。假设我需要获取过去7天内可用的任何对象,我如何更改以下代码来实现这一点,因为我不知道对象的确切数量,所以我不知道分页的值应该是多少,并且我不确定在获取所有数据之前是否可以递归发送Get请求 public JToken Search( ObjCode objcode, object parameters, int limit =

我试图向AtTask RESTful API发出Get请求,以获取1000个项目对象。ATask给出了一些关于如何做到这一点的提示。我需要对我要请求的对象的数量进行分页。假设我需要获取过去7天内可用的任何对象,我如何更改以下代码来实现这一点,因为我不知道对象的确切数量,所以我不知道分页的值应该是多少,并且我不确定在获取所有数据之前是否可以递归发送Get请求

public JToken Search( ObjCode objcode, object parameters, int limit = 100 )
            {
            VerifySignedIn();
            string[] p = parameterObjectToStringArray(parameters, "sessionID=" + SessionID);
            JToken json = null;
            if (limit > 100)
            {
               json = client.DoGet(string.Format("/{0}/search?$$LIMIT={1}", objcode,limit),limit,p);
            }
            else
            {
              json = client.DoGet(string.Format("/{0}/search", objcode),limit,p);
            }

            return json;
            }


 public JToken DoGet(string path,int limit = 100 ,params string[] parameters)
        {
            return DoRequest(path,limit ,parameters);
        }

 public JToken DoRequest(string path,int limit, params string[] parameters)
        {
            if (!path.StartsWith("/"))
            {
                path = "/" + path;
            }
            string fullUrl = url + path + ToQueryString(parameters,limit);

            if (DebugUrls) Console.WriteLine("Requesting: {0}", fullUrl);

            WebRequest request = HttpWebRequest.CreateDefault(new Uri(fullUrl));
            using (WebResponse response = request.GetResponse())
            {
                using (Stream responseStream = response.GetResponseStream())
                {
                    return ReadResponse(responseStream);
                }
            }
        }

 private string ToQueryString(string[] parameters, int limit = 100)
    {
        StringBuilder sb = new StringBuilder();
        parameters.ToList().ForEach(s => sb.Append(s).Append("&"));
        if (sb.Length > 0)
        {
            sb.Remove(sb.Length - 1, 1);
        }
        return limit > 100 ? "&" + sb : "?" + sb;
    }

您将需要首先调用一个COUNT来获取您正在处理的对象数量的值。 这与/search的方法相同,但使用/count而不是search

范例

GET /attask/api/v4.0/proj/count?status=cur
然后,您可以使用$$FIRST翻页并提取结果

您的代码看起来是这样的

public JToken Search( ObjCode objcode, object parameters, int limit = 100 )
        {
        VerifySignedIn();
        string[] p = parameterObjectToStringArray(parameters, "sessionID=" + SessionID);
        JToken json = null; 
        JToken count = null;

        count = client.DoGet(string.Format("/{0}/count", objcode),limit,p);

        for(int i=0; i<count; i+limit){
            if (limit > 100)
            {
               json = client.DoGet(string.Format("/{0}/search?$$LIMIT={1}&$$FIRST={2}", objcode,limit,i),limit,p);
            }
            else
            {
               json = client.DoGet(string.Format("/{0}/search&$$FIRST={1}", objcode,i),limit,p);
            }

            return json;
        }

     }
publicjtoken搜索(ObjCode-ObjCode,对象参数,int-limit=100)
{
验证signedin();
字符串[]p=ParameterObjectToStringAray(参数,“sessionID=”+sessionID);
jtokenjson=null;
JToken计数=空;
count=client.DoGet(string.Format(“/{0}/count”,objcode),limit,p);
对于(int i=0;i 100)
{
json=client.DoGet(string.Format(“/{0}/search?$$LIMIT={1}&$$FIRST={2}”),objcode,LIMIT,i),LIMIT,p);
}
其他的
{
json=client.DoGet(string.Format(“/{0}/search&$$FIRST={1}”),objcode,i),limit,p);
}
返回json;
}
}

可以找到此信息

您需要首先调用一个COUNT来获取您正在处理的对象数量的值。 这与/search的方法相同,但使用/count而不是search

范例

GET /attask/api/v4.0/proj/count?status=cur
然后,您可以使用$$FIRST翻页并提取结果

您的代码看起来是这样的

public JToken Search( ObjCode objcode, object parameters, int limit = 100 )
        {
        VerifySignedIn();
        string[] p = parameterObjectToStringArray(parameters, "sessionID=" + SessionID);
        JToken json = null; 
        JToken count = null;

        count = client.DoGet(string.Format("/{0}/count", objcode),limit,p);

        for(int i=0; i<count; i+limit){
            if (limit > 100)
            {
               json = client.DoGet(string.Format("/{0}/search?$$LIMIT={1}&$$FIRST={2}", objcode,limit,i),limit,p);
            }
            else
            {
               json = client.DoGet(string.Format("/{0}/search&$$FIRST={1}", objcode,i),limit,p);
            }

            return json;
        }

     }
publicjtoken搜索(ObjCode-ObjCode,对象参数,int-limit=100)
{
验证signedin();
字符串[]p=ParameterObjectToStringAray(参数,“sessionID=”+sessionID);
jtokenjson=null;
JToken计数=空;
count=client.DoGet(string.Format(“/{0}/count”,objcode),limit,p);
对于(int i=0;i 100)
{
json=client.DoGet(string.Format(“/{0}/search?$$LIMIT={1}&$$FIRST={2}”),objcode,LIMIT,i),LIMIT,p);
}
其他的
{
json=client.DoGet(string.Format(“/{0}/search&$$FIRST={1}”),objcode,i),limit,p);
}
返回json;
}
}
可以找到这些信息