如何通过C# SDK/REST API下载链接共享的Box文件夹文件
解决Box共享文件夹的API/SDK访问与下载问题
针对你遇到的通过编程方式访问Box共享链接文件夹的问题,我整理了正确的操作步骤和所有者需要配置的权限要求,帮你解决这个问题:
一、正确使用C# SDK访问共享文件夹
你之前调用SharedItemsAsync时可能参数传递有误,或者没处理好共享链接的权限验证,正确的操作流程如下:
- 提取共享链接的token:从共享链接里取出
s/之后的字符串,比如链接是https://<user>.box.com/s/abcdef123456,那token就是abcdef123456。 - 处理带密码的共享链接:如果共享链接设置了密码,需要在请求里带上密码参数;无密码的话直接用token即可。
- 调用SDK获取并下载内容:
// 提取共享链接的核心token string sharedLinkToken = "abcdef123456"; // 若共享链接有密码,创建带密码的共享链接请求对象 var sharedLinkRequest = new BoxSharedLinkRequest { SharedLink = new BoxSharedLink { Token = sharedLinkToken, Password = "yourSharedLinkPassword" } }; // 获取共享的文件夹信息 var sharedItems = await client.SharedItemsManager.SharedItemsAsync(sharedLink: sharedLinkRequest); // 确认返回结果是文件夹类型 if (sharedItems is BoxFolder sharedFolder) { // 获取文件夹内的所有项目 var folderItems = await client.FoldersManager.GetInformationAsync(sharedFolder.Id, fields: new List<string> { "item_collection" }); foreach (var item in folderItems.ItemCollection.Entries) { if (item is BoxFile file) { // 下载文件到本地 using (var downloadStream = await client.FilesManager.DownloadStreamAsync(file.Id)) { using (var localFileStream = new FileStream($"C:\\YourDownloadPath\\{file.Name}", FileMode.Create)) { await downloadStream.CopyToAsync(localFileStream); } } } } }
二、正确使用REST API访问共享文件夹
直接调用/2.0/folders/<folderId>/items是无法直接访问共享链接文件夹的(除非该文件夹已经被添加到你的Box账户中),必须在请求里附带共享链接的验证信息:
- 无密码的共享链接:在请求URL后追加
shared_link参数即可:
GET /2.0/folders/<shared-folder-id>/items?shared_link=https://<user>.box.com/s/abcdef123456 HTTP/1.1 Host: api.box.com Authorization: Bearer <your-bearer-token>
- 带密码的共享链接:需要在请求体里传入共享链接的token和密码:
GET /2.0/folders/<shared-folder-id>/items HTTP/1.1 Host: api.box.com Authorization: Bearer <your-bearer-token> Content-Type: application/json { "shared_link": { "token": "abcdef123456", "password": "yourSharedLinkPassword" } }
另外,你也可以先调用/2.0/shared_items接口获取共享文件夹的ID:
GET /2.0/shared_items?shared_link=https://<user>.box.com/s/abcdef123456 HTTP/1.1 Host: api.box.com Authorization: Bearer <your-bearer-token>
这个接口会返回共享文件夹的详细信息(包括ID),之后再用这个ID调用/folders/<id>/items接口,记得附带共享链接参数。
三、文件夹所有者需要配置的权限
如果API还是无法访问,所有者需要检查以下几个关键设置:
- 共享链接权限范围:确保共享链接的权限设为「任何人可访问」(无Box账户也能访问)或「已收到链接的人」,如果设为「仅限公司内部人员」,而你不在该企业,就无法访问。
- 开启下载权限:创建共享链接时必须勾选「允许下载」选项,否则即使能查看内容,也无法通过API下载文件。
- 企业级共享限制:如果所有者用的是Box企业账户,需要联系管理员确认是否开启了「允许外部共享」权限,有些企业会限制外部用户通过API访问共享内容。
- 共享链接有效期:确认共享链接没有设置过期时间,或者当前时间在有效期内。
- 添加协作成员(可选):如果以上设置都没问题还是无法访问,所有者可以直接把你添加为该文件夹的协作成员(赋予「查看者」或「编辑者」权限),这样你就能直接通过常规的
/folders/<id>/items接口访问,无需附带共享链接参数。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

