首页 > 解决方案 > OneDrive Search api 不支持 ListItems 上的展开查询

问题描述

我需要.docx在我的OneDrive. 所以这一点很简单,它使用 OneDrive 搜索 api 工作。不起作用的部分是,在响应中,对于每个,我还需要我们创建的与 this 关联DriveItem的自定义属性。这些自定义属性包含创建某种报告所需的信息。ListItem.FieldsDriveItem

扩展ListItem似乎root/children不需要任何搜索就可以在资源上工作,但它不能解决我的问题,我需要文件名中带有 .docx 扩展名的文件,这些文件可以在根目录下或根目录下的任何子文件夹下。

所以这个请求会返回带有响应的 CustomProperty

/_api/v2.0/drives/[drive id]/root/children?select=*%2cwebDavUrl
%2csharepointIds&expand=listItem(select%3dfields%3bexpand%3dfields(select%3dCustomProperty))

但是,当我尝试扩展ListItemDriveItems搜索查询返回的内容时,如下所示:

/_api/v2.0/drives/[drive id]/root/search(q='docx')?select=*%2cwebDavUrl%2csharepointIds&expand=listItem(select%3dfields%3bexpand%3dfields(select%3dCustomProperty))

我收到一个错误:

Error: {"error":{"code":"notSupported","message":"The request is not supported by the system."}}

是否在Search apiListItem.FieldsDriveItem不支持扩展?OneDrive

如果不是,那么我还有另一种方法可以在这里实现我想要做的事情吗?我不是试图在 上搜索CustomProperty,只是想检索该值作为与其关联的响应的一部分DriveItem

预期,如果我通过Microsoft Graph搜索 api 而不是OneDriveapi 运行它,我会得到相同/相似的错误。

我可以做的一种解决方法是首先搜索.docx没有 expand 关键字的文件,它会递归搜索并返回.docx我的OneDrive. 然后我可以通过OneDrive使用它们DriveItem.Id和扩展的ListItem.Fields属性进行单独调用以再次请求这些项目。不过,那将是一个糟糕的解决方法。因为不是在单个请求中实现我所需要的,而是我必须发出 1000 或 10000 次单独的 I/O 请求(每个 .docx 文件一个)才能获得扩展的ListItem属性。

标签: microsoft-graph-apionedrive

解决方案


这是端点的一个已知问题/search不幸的是,目前也没有一个好的解决方法。为了检索ListItem资源,您需要DriveItem直接从搜索结果中检索每个资源:

/drives/{drive-id}/items/{item-id}?$expand=listItem

推荐阅读