所以看起来可能以稍微复杂的方式。由于我们不能使用搜索,这意味着我们必须保留一个(访客)用户注册到的所有共享点站点的列表。
我注意到var sites = await _graphClient.Sites.Request().GetAsync(); 没有返回错误,而是给你一个空数组。
首先,我们需要知道 Sharepoint 站点 ID。 Sites 资源有一个名为 GetByPath 的方法。这允许我们检索站点数据:
var site = await _graphClient.Sites.GetByPath("/sites/Contoso-Customer1",
"contoso.sharepoint.com").Request().GetAsync();
第一个参数是站点 url,第二个参数是站点域。上面的示例显示了https://contoso.sharepoint.com/sites/Contoso-Customer1 的值。
现在我们可以获取站点 ID 并列出驱动器。为简洁起见,我在这里的示例中省略了几个空检查。
以下行将为我们提供驱动器:
var drives = await _graphClient.Sites[site.Id].Drives.Request().GetAsync();
我假设有一个驱动器。检索驱动器 ID 就像 var driveId = drives.First().Id
然后我们需要列表的 ID。该列表包含文件和文件夹。
var list = await _graphClient.Sites[site.Id]
.Drives[driveId]
.List
.Request()
.GetAsync();
(编辑:我们也可以绕过驱动查询,直接获取列表:var lists = await _graphClient.Sites[site.Id].Lists.Request().GetAsync(); 。然后列表ID为lists.First().Id)
接下来我们可以检索列表中的所有项目:
var listContent = await _graphClient.Sites[site.Id]
.Lists[list.Id]
.Items
.Request()
.GetAsync();
现在我们可以获得所有详细的文件信息。对于这个例子,我只检索文件名:
List<string> fileNames = new List<string>();
foreach (var item in listContent)
{
var file = await _graphClient.Sites[site.Id].Lists[list.Id].Items[item.Id].DriveItem.Request().GetAsync();
fileNames.Add(file?.Name);
}
试图直接获取文件数据是不行的,因为有些属性为空:
listContent?.Select(x => new
{
x.Id, // id of item in the list
x.Name, // null
x.ContentType,
DriveItemName = x.DriveItem?.Name, // null
x.WebUrl, // exact url to file
}),
(_graphClient 变量基于教程here)