SharePoint REST API:GetFolderByServerRelativeUrl按修改时间过滤失败求助
问题描述
调用GetFolderByServerRelativeUrl接口时,尝试通过$filter按TimeLastModified字段过滤指定日期范围的文件,但返回了文件夹内所有项目,过滤规则未生效。使用的请求链接:
https://mycompany.sharepoint.com/sites/myTeam/_api/web/GetFolderByServerRelativeUrl('/sites/MyTeam/Shared%20Documents/My%20Project')?$expand=Files&$filter=TimeLastModified ge datetime'2023-12-11T00:00:00Z' and TimeLastModified le datetime'2024-01-05T00:00:00Z'
原因分析
直接在GetFolderByServerRelativeUrl的根路径添加$filter,实际是对文件夹对象自身的属性进行过滤,而非对扩展出来的Files集合中的文件进行过滤,因此无法筛选目标文件。
解决方案
方案1:通过文档库Items集合实现服务器端过滤(推荐)
利用文档库对应的列表项集合查询,通过FileDirRef字段定位目标文件夹,同时过滤文件的修改日期:
https://mycompany.sharepoint.com/sites/myTeam/_api/web/lists/getbytitle('Shared Documents')/items?$select=FileLeafRef,TimeLastModified,Created&$filter=FileDirRef eq '/sites/MyTeam/Shared Documents/My Project' and TimeLastModified ge datetime'2023-12-11T00:00:00Z' and TimeLastModified le datetime'2024-01-05T00:00:00Z'&$expand=File
FileDirRef:文件所在文件夹的服务器相对路径,用于限定查询范围到目标文件夹$expand=File:可选,用于获取文件的完整属性信息$select:指定需要返回的字段,减少响应数据量
方案2:先获取所有文件再客户端过滤(不推荐,大文件夹场景效率低)
若坚持使用GetFolderByServerRelativeUrl,可先获取文件夹下所有文件,再通过本地代码筛选日期范围:
https://mycompany.sharepoint.com/sites/myTeam/_api/web/GetFolderByServerRelativeUrl('/sites/MyTeam/Shared%20Documents/My%20Project')?$expand=Files($select=Name,TimeLastModified,Created)
拿到返回的Files数组后,在代码中筛选TimeLastModified处于目标区间内的项即可。
注意事项
- 针对集合的过滤规则需添加到集合路径中(如
Files?$filter=...),而非根路径 - 日期格式必须严格遵循
datetime'YYYY-MM-DDTHH:MM:SSZ'的UTC格式 - 若需按创建日期过滤,将
TimeLastModified替换为Created字段即可
内容的提问来源于stack exchange,提问作者HouKaide
相关产品推荐
相关产品推荐

