Office 365 MyFiles API - 如何使用One Drive中的Id字符串获取Folder对象

时间:2016-03-24 09:57:02

标签: api office365

从OneDrive获取特定的文件夹对象我感到很高兴。我希望根据用户正在查看的文件夹生成痕迹痕迹。

为了解决问题,我正在实例化SharePointClient,其目标用户是根文件夹,如下所示:

var spClient = await AuthenticationHelper.EnsureSharePointClientCreatedAsync("MyFiles");

然后我就像这样获取根文件和文件夹:

var rootFiles = await spClient.Files.ExecuteAsync();
var files = rootFiles.CurrentPage;

如果用户点击进入某个文件夹,我会提取该文件夹文件和文件夹,如下所示:

var folderFiles = await spClient.Files[selectedItemID].ToFolder().Children.ExecuteAsync();
var files = folderFiles.CurrentPage;

在这种情况下,selectedItemID只是用户选择的文件夹的Id属性。

至于问题我正在获取文件夹对象本身。我一直收到这个错误:

Expected a relative URL path without query or fragment.
Parameter name: entitySetName

当我尝试执行以下操作之一时:

// first attempt
var folder = await spClient.Files[selectedItemID].ToFolder().ExecuteAsync();

// second attempt - which is the same as first attempt with use of GetById()
var folder = await spClient.Files.GetById(selectedItemID).ToFolder().ExecuteAsync();

// third attempt - which is the same as second attempt without chaining
var thisItemFetcher = spClient.Files.GetById(selectedItemID);
var thisFolderFetcher = thisItemFetcher.ToFolder();
var myFolder = await thisFolderFetcher.ExecuteAsync();
var folder = myFolder as Microsoft.Office365.SharePoint.FileServices.Folder;

如果我在查找文件时执行任何这些尝试,我会得到文件对象没问题。

当然我尝试查找此错误,但我没有到达任何地方。

我想做的事情相当简单。我只需要返回一个简单对象列表

{
    FolderID = folder.Id,
    FolderName = folder.Name,
}

用户当前正在查看的文件夹以及每个相应的父文件直到根文件夹。

我知道我可以基于folder.ParentReference.Id属性递归执行此操作。

现在您可能在想为什么不能从用户正在查看的文件夹中请求文件和文件夹列表?当然,基于任何返回的文件或文件夹.ParentReference.Id,您可以进行递归。那个问题的答案就是:如果文件夹是空的,会发生什么?

有人可以解释我在这里这个简单但不那么直截了当的问题。

根据SkyDrive Folder object docs

A Folder object can be returned as part of:
/FOLDER_ID/files
/me/skydrive/files
/me/skydrive/shared/files
/USER_ID/skydrive/files
/ALBUM_ID/files

但我不确定这是否也适用于Office 365 OneDrive。

查看最新的OneDrive API,他们似乎使用完全不同的请求结构:
GET /drive/items/{item-id}

我的SarePointClient.Drive未公开Items集合。

对于那些好奇的人,我使用Microsoft Office 365 My Files Library v1.0.22访问OneDrive。

1 个答案:

答案 0 :(得分:0)

文档SkyDrive Folder对象正在使用服务端点https://apis.live.net

OneDrive API文档正在使用服务端点: https://api.onedrive.com/v1.0(OneDrive) 或https:// {tenant} -my.sharepoint.com/_api/v2.0(OneDrive for Business)。

在这种情况下,您应该使用最新的.NET OneDrive SDK:OneDrive .NET SDK 1.1.29

  

如何使用One Drive中的Id字符串获取Folder对象

GET / drive / items / {item-id}

oneDriveClient.Drive.Items["{item_id}"]