首页 > 解决方案 > Web API, C# - 递归调用文档库 API 以获取所有内容

问题描述

我正在使用文档库。它可能包含文件夹和文件。我的要求是使用 API ( https://some.domain.com/folder/{id} )从文档库中获取所有内容

我目前的逻辑是使用 STACK

在根文件夹 -

  public async Task<Content> RetrieveDocuments(string url, string id)
    {
        var files = new List<string>();
        var stack = new Stack<string>();
        stack.Push(id);

        while (stack.Count > 0)
        {
            var roundId = stack.Pop();
            var response = Make An API call (https://some.domain.com/folder/{id})
            if (response != null)
            {
                response.Folders?.ForEach(f => stack.Push(f.FolderId));
                response.Files?.ForEach(f => files.Add(resourceRegex.Replace(f.Path, "/")));
            }
        }

        return files;
    }

现在这里的问题是-如果递归放置的文件夹中有很多文件..它变得非常耗时,并且此函数调用通常会导致超时。

任何人都可以提出更好的方法。

标签: c#apidocument-libraryegnyte

解决方案


这个问题很难解决,它实际上取决于文件夹的结构。最大的问题是,在前一个请求完成之后,您正在等待执行下一个请求。

您正在实现的算法是 BFS(但在这种情况下,如果它是 DFS 或 BFS,则没有区别)。您可以尝试实现它以并行运行,但感觉真的很难。

我认为您可以尝试一种混合解决方案,您可以在其中读取第一个文件夹,然后并行读取所有第一级文件夹。以下是有关如何实现并行发送请求的提示:https ://www.michalbialecki.com/2018/04/19/how-to-send-many-requests-in-parallel-in-asp-net-核/

无论如何,当您无法控制 API 时,我认为没有一个好的解决方案。您可能只需要延长超时时间。

祝你好运!:)


推荐阅读