我正在尝试通过一次API调用获取所有文件夹和文件。 我为此使用$expand
/sites/_api/Web/GetFolderByServerRelativeUrl('MyDocuments')?$expand= "Folders/ListItemAllFields,Files/ListItemAllFields,Folders/Files/ListItemAllFields,Folders/Folders/ListItemAllFields,Folders/Folders/Files/ListItemAllFields"
这就像预期的那样工作。 但是随着响应,我得到了一些系统文件夹,例如Forms
我尝试了这种方法 https://sharepoint.stackexchange.com/questions/138135/get-all-files-and-folders-in-one-call?noredirect=1&lq=1 所以我在我的请求中添加了:$filter
。
/sites/_api/Web/GetFolderByServerRelativeUrl('MyDocuments')?$expand="Folders/ListItemAllFields,Files/ListItemAllFields,Folders/Files/ListItemAllFields,Folders/Folders/ListItemAllFields,Folders/Folders/Files/ListItemAllFields"?$filter="Folder/Name ne 'Attachments' and Folder/Name ne 'Item' and Folder/Name ne 'Forms'"
但看起来过滤器根本不影响响应。 有什么方法可以在一个请求中使用扩展和过滤吗? 如何过滤响应以删除系统文件夹?
事实上,过滤器表达式是有效的,但在这种情况下它会被忽略。
/sites/_api/Web/GetFolderByServerRelativeUrl('MyDocuments')?$filter=<expr>
^^^^^^^^^^^^^^
$filter expression could not be applied per item resource
(GetFolderByServerRelativeUrl function returns a Folder resource here)
每个资源集合仅支持$filter
查询选项。
相反,我建议使用以下ListItemCollection
资源端点:
url: /_api/web/lists/getbytitle('<title>')/items
method: GET
它返回项的集合(ListItem
资源类型(。使用$expand
查询选项,所有文件和文件夹都将包含在结果中:
/_api/web/lists/getbytitle('<title>')/items?$expand=Folder,File
注意:结果中不会包含任何系统文件和文件夹
检查您的 REST URL。
在这里你写了:
?$expand="文件夹/ListItemAllFi_____________ListItemAllFields"?$filter=
这里应该是&$filter而不是代替?$filter
试试下面的网址:
/sites/_api/Web/GetFolderByServerRelativeUrl('MyDocuments')?$expand="Folders/ListItemAllFields,Files/ListItemAllFields,Folders/Files/ListItemAllFields,Folders/Folders/ListItemAllFields,Folders/Folders/Files/ListItemAllFields"&$filter="Folder/Name ne 'Attachments' and Folder/Name ne 'Item' and Folder/Name ne 'Forms'"