Dropbox C# API v2 列出团队文件夹内容
Dropbox C# API v2 List Team folder contents
下午好,
我正在尝试从业务保管箱中的团队成员的保管箱 API 中获取目录列表。
该文档似乎有些不清楚,而且令人沮丧地难以获得内容。因此,我的代码可能会有所偏差,这也是我遇到问题的原因。我的团队和我的管理员用户都有一个开发令牌。
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);
}
}
不,我的问题是我只能获取目录中显示的内容。因此,例如,我已经登录到 Web 浏览器并进入 Dropbox,我有三个目录。
|
|- User Dir 'This is my home directory'
|- Team Dir 'This is a directory for the team'
|- Sample folder
团队有权访问团队目录和示例文件夹。我只想获取目录列表。
我一定是做错了什么,我也尝试了覆盖 dbx.Files.ListFolderAsync 我已经将 includeMountedFolders 参数设置为 true,但仍然只在我的配置文件中列出两个文件。
我也尝试过使用用户令牌而不是团队令牌并设置为管理员。
抱歉代码有点乱,我只想在重构之前让它工作。
如有任何帮助,我们将不胜感激。
谢谢
听起来您想访问您的 "team space". You need to explicitly specify this when calling the API. I recommend reading the Namespace Guide,其中对此进行了详细介绍。
.NET SDK 支持通过 DropboxClient.WithPathRoot
.
设置 Dropbox-Api-Path-Root
header
首先,您可以从GetCurrentAccountAsync
获取根信息:
var accountInfo = await dbx.Users.GetCurrentAccountAsync();
Console.WriteLine(accountInfo.RootInfo.RootNamespaceId);
然后,您可以使用 DropboxClient.WithPathRoot
来访问共享的团队 space 并根据需要设置 Dropbox-Api-Path-Root
header,例如:
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);
}
下午好,
我正在尝试从业务保管箱中的团队成员的保管箱 API 中获取目录列表。
该文档似乎有些不清楚,而且令人沮丧地难以获得内容。因此,我的代码可能会有所偏差,这也是我遇到问题的原因。我的团队和我的管理员用户都有一个开发令牌。
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);
}
}
不,我的问题是我只能获取目录中显示的内容。因此,例如,我已经登录到 Web 浏览器并进入 Dropbox,我有三个目录。
|
|- User Dir 'This is my home directory'
|- Team Dir 'This is a directory for the team'
|- Sample folder
团队有权访问团队目录和示例文件夹。我只想获取目录列表。
我一定是做错了什么,我也尝试了覆盖 dbx.Files.ListFolderAsync 我已经将 includeMountedFolders 参数设置为 true,但仍然只在我的配置文件中列出两个文件。
我也尝试过使用用户令牌而不是团队令牌并设置为管理员。
抱歉代码有点乱,我只想在重构之前让它工作。
如有任何帮助,我们将不胜感激。
谢谢
听起来您想访问您的 "team space". You need to explicitly specify this when calling the API. I recommend reading the Namespace Guide,其中对此进行了详细介绍。
.NET SDK 支持通过 DropboxClient.WithPathRoot
.
Dropbox-Api-Path-Root
header
首先,您可以从GetCurrentAccountAsync
获取根信息:
var accountInfo = await dbx.Users.GetCurrentAccountAsync();
Console.WriteLine(accountInfo.RootInfo.RootNamespaceId);
然后,您可以使用 DropboxClient.WithPathRoot
来访问共享的团队 space 并根据需要设置 Dropbox-Api-Path-Root
header,例如:
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);
}