Dropbox C# API v2 列出团队文件夹内容

use*_*598 1 c# dropbox

我正在尝试从 Dropbox API 获取业务 Dropbox 团队成员的目录列表。

该文档似乎有些不清楚,并且令人沮丧地难以获取内容。因此我的代码可能会有所偏差,这也是我遇到问题的原因。我有一个用于团队和我的管理员用户的开发令牌。

        using (var client = new DropboxTeamClient("my token"))
        {

            var teamInfo = await client.Team.GetInfoAsync();
            var teamName = teamInfo.Name;
            var numberOfUsers = teamInfo.NumProvisionedUsers;


            var memListResult = await client.Team.MembersListAsync();
            foreach (var m in memListResult.Members)
            {
                var accountId = m.Profile.AccountId;
                var email = m.Profile.Email;
                Console.WriteLine($"Id {accountId} - email is {email}");
            }

            var accId = memListResult.Members.First(x => x.Profile.Email.Equals("myEmail"))
                ?.Profile.AccountId;

            var memId = memListResult.Members.First(x => x.Profile.Email.Equals("myEmail"))
                ?.Profile.TeamMemberId;

            
            var dbx = client.AsAdmin(memId);

            

            try
            {
                var full = await dbx.Users.GetCurrentAccountAsync();
                Console.WriteLine("{0} - {1}", full.Name.DisplayName, full.Email);
                await ListRootFolder(dbx, true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }



        }



  private async Task ListRootFolder(DropboxClient dbx)
  {
        var list = await dbx.Files.ListFolderAsync(string.Empty);
        //var tlist = await dbx.

        // show folders then files
        foreach (var item in list.Entries.Where(i => i.IsFolder))
        {
            Console.WriteLine("D  {0}/", item.Name);
        }

        foreach (var item in list.Entries.Where(i => i.IsFile))
        {
            Console.WriteLine("F{0,8} {1}", item.AsFile.Size, item.Name);
        }
  }
Run Code Online (Sandbox Code Playgroud)

不,我的问题是我只能获取目录中显示的内容。例如,我已通过网络浏览器登录 Dropbox,我有三个目录。

|
|- User Dir 'This is my home directory'
|- Team Dir 'This is a directory for the team'
|- Sample folder 
Run Code Online (Sandbox Code Playgroud)

团队有权访问团队目录和示例文件夹。我想做的只是获取目录列表。

我肯定做错了什么;我还尝试了 dbx.Files.ListFolderAsync 的覆盖,我已将 includeMountedFolders 参数设置为 true,但仍然只在我的配置文件中列出两个文件。

我还尝试使用用户令牌而不是团队令牌并设置为管理员。

抱歉,代码有点乱;我只想在重构之前让它工作。

Gre*_*reg 5

听起来您想访问您的“团队空间”。您需要在调用 API 时明确指定这一点。我建议阅读命名空间指南,其中详细介绍了这一点。

.NET SDK 支持Dropbox-Api-Path-Root通过DropboxClient.WithPathRoot.

首先,您可以从以下位置获取根信息GetCurrentAccountAsync

var accountInfo = await dbx.Users.GetCurrentAccountAsync();
Console.WriteLine(accountInfo.RootInfo.RootNamespaceId);
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过根据需要DropboxClient.WithPathRoot设置标题来访问团队共享空间,例如:Dropbox-Api-Path-Root

dbx = dbx.WithPathRoot(new PathRoot.NamespaceId(accountInfo.RootInfo.RootNamespaceId));
var res = await this.client.Files.ListFolderAsync(path: "");
foreach (var entry in res.Entries)
{
    Console.WriteLine(entry.Name);
}
Run Code Online (Sandbox Code Playgroud)