如何通过Box API及.NET Core SDK高效获取父文件夹子目录文件的Box ID?
使用.NET Core SDK高效遍历Box父文件夹下所有子文件ID的方法
核心思路
高效的关键在于减少API调用次数:利用Box API的最大分页(1000条/页)批量获取内容,通过递归遍历子文件夹,同时只请求必要字段(id和type)降低数据传输量,避免不必要的资源消耗。
步骤实现
1. 初始化Box客户端
首先安装Box .NET SDK NuGet包:Install-Package Box.V2
使用服务账户JWT认证(适合后端服务场景)初始化客户端:
using Box.V2; using Box.V2.Config; using Box.V2.JWTAuth; var boxConfig = new BoxConfigBuilder("<CLIENT_ID>", "<CLIENT_SECRET>", "<ENTERPRISE_ID>") .SetAuthRepositoryUri("https://api.box.com/oauth2/token") .Build(); var boxJwt = new BoxJWTAuth(boxConfig); var adminToken = boxJwt.AdminToken(); var boxClient = boxJwt.AdminClient(adminToken);
2. 递归遍历+批量获取的核心方法
实现递归方法遍历指定文件夹下的所有文件,收集ID:
using Box.V2.Models; using System.Collections.Generic; using System.Threading.Tasks; public static async Task<List<string>> GetAllFileIdsInFolderAsync(BoxClient client, string folderId) { var fileIds = new List<string>(); string nextMarker = null; do { // 仅请求所需字段,缩减响应体积 var items = await client.FoldersManager.GetFolderItemsAsync( folderId, limit: 1000, // 用最大分页减少API调用次数 marker: nextMarker, fields: new List<string> { "id", "type" } ); foreach (var item in items.Entries) { if (item.Type == "file") { fileIds.Add(item.Id); } else if (item.Type == "folder") { // 递归处理子文件夹 var subFolderFileIds = await GetAllFileIdsInFolderAsync(client, item.Id); fileIds.AddRange(subFolderFileIds); } } nextMarker = items.NextMarker; } while (!string.IsNullOrEmpty(nextMarker)); return fileIds; }
3. 调用方法并处理结果
// 替换为目标父文件夹ID(根文件夹ID为"0") var parentFolderId = "0"; var allFileIds = await GetAllFileIdsInFolderAsync(boxClient, parentFolderId); // 示例:输出所有文件ID foreach (var id in allFileIds) { Console.WriteLine($"文件ID: {id}"); }
优化建议
- 速率限制处理:Box API默认限制1000次/分钟,若文件/文件夹数量极大,可借助SDK内置的重试机制,或添加适度请求延迟避免限流。
- 谨慎并行:针对大量子文件夹,可尝试
Parallel.ForEachAsync并行处理,但需控制并发数(建议≤5),防止触发平台限流。 - 异常捕获:添加
try-catch处理权限不足、文件夹不存在等场景:
try { var allFileIds = await GetAllFileIdsInFolderAsync(boxClient, parentFolderId); } catch (BoxException ex) { Console.WriteLine($"API调用错误: {ex.Message}"); }
内容的提问来源于stack exchange,提问作者Qiuzman
相关产品推荐
相关产品推荐

