2016-07-28 62 views
0

我打电话API来获取联系人列表(他们可能会在100的或1000年)和列表一次只列出了100和它的给我用这个分页选项对象在列表的末尾叫做'nextpage',并且URL的下一个100等等。使用不同的参数多次运行同样的方法在C#

所以在我的c#代码中,我得到第一个100并循环遍历它们(做某事)并且寻找' nextpage'对象并获取URL并重新调用API等。看起来像下一页链继续进行,取决于我们有多少联系人。

能否让我知道是否有一种方法可以让我通过相同的代码进行循环,并且仍然能够使用来自'nextpage'对象的新URL并运行每100个我得到的逻辑?

+0

为什么不使用类的属性来保留它?真的不知道问题是什么,如果你已经有了所有的变量,为什么不保留对它们的引用呢? – Arjang

+0

是的,但如何反思相同的方法? – Bokbob

+0

你能复制你使用的代码吗? @Bokbob – MoustafaS

回答

0

伪代码,因为我们没有具体的例子有工作,但...

大多数API使用分页将有项目的总数。您可以设置每个迭代的最大项目并像这样跟踪它,或者检查null next_object,具体取决于API如何处理它。

List<ApiObject> GetObjects() { 

    const int ITERATION_COUNT = 100; 
    int objectsCount = GetAPICount(); 

    var ApiObjects = new List<ApiObject>(); 

    for (int i = 0; i < objectsCount; i+= ITERATION_COUNT) { 

     // get the next 100 
     var apiObjects = callToAPI(i, ITERATION_COUNT); // pass the current offset, request the max per call 
     ApiObjects.AddRange(apiObjects); 

    } // this loop will stop after you've reached objectsCount, so you should have all 

    return ApiObjects; 
} 

// alternatively: 

List<ApiObject> GetObjects() { 

    var nextObject = null; 
    var ApiObjects = new List<ApiObject>(); 

    // get the first batch 
    var apiObjects = callToAPI(null); 
    ApiObjects.AddRange(apiObjects); 
    nextObject = callResponse.nextObject; 

    // and continue to loop until there's none left 
    while (nextObject != null) { 

     var apiObjects = callToAPI(null); 
     ApiObjects.AddRange(apiObjects); 
     nextObject = callResponse.nextObject; 
    } 

    return apiObjects; 
} 

这无论如何是基本的理念,每两个常用的Web服务方法(有很多细节的冷落,因为这是不工作的代码,但只是演示的一般方法)。

+0

非常感谢jdl134679,它像一个魅力.. – Bokbob

+0

很高兴提供帮助。作为一个侧面说明,它通常是首先检索一切从web服务(把它所有到一个集合)一个很好的做法,和*然后*过程中检索完所有这些之后,整个集合。这使“Web服务窗口”变得狭窄并有助于将数据源与实际的业务逻辑分开。 (这里值得注意的例外是,如果你有大量的数据的获得,并希望开始一个异步的方式处理它,在这种情况下,这种做法改变了一下) – jleach

+0

是关于数据我不知道我们有多少可以期待。但所有呼叫都是同步的,因为另一个呼叫取决于第一个呼叫的结果等等。 – Bokbob

相关问题