2017-08-24 70 views
0

我想通過一個API調用獲取所有文件夾和文件。 我使用$expand這個SharePoint 2013 REST API。過濾系統文件夾和擴展文件夾和文件。

/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'" 

但它看起來像過濾器根本不影響響應。 是否有任何方法可以在一個請求中使用擴展和過濾? 如何過濾響應以刪除系統文件夾?

回答

0

檢查您的REST URL。

在這裏,你已經寫了:??

$擴大= 「文件夾/ ListItemAllFi _____________ ListItemAllFields」 $過濾器=

這應該是& $過濾,而不是代替$過濾

請嘗試以下URL:

/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'" 
+1

感謝。我認爲這只是打字錯誤。我有正確的網址。仍然有這個問題,並取回所有系統文件夾以及我的文件夾。 –

1

實際上,過濾器表達式是有效的,但在這種情況下會被忽略。

/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 resource端點:

url: /_api/web/lists/getbytitle('<title>')/items 
method: GET 

它返回項目集合(ListItem resource型)。使用$expand查詢選項所有文件夾一起文件將包括在結果:

/_api/web/lists/getbytitle('<title>')/items?$expand=Folder,File 

注:沒有系統文件和文件夾將包含在結果

+0

謝謝你的作品。不幸的是,這種方法並沒有給我一個內容結構。這個API向我返回了一系列項目,所以我無法從中獲取有關文件夾和文件結構的信息,而無需執行額外的調用。 –