SharePoint 2013 REST API .过滤系统文件夹并展开文件夹和文件



我正在尝试通过一次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'"

最新更新