MS Graph Delta请求如何筛选?OneDrive .xlsx文件筛选不生效怎么办
问题原因
- MS Graph的
delta查询对$filter运算符的支持存在限制,endsWith()函数不在delta接口的支持列表内,你传入的筛选参数会被服务端直接忽略,因此会返回所有符合delta查询范围的文件。
可行解决方案
方案1:保留delta增量能力,本地二次筛选(推荐)
delta接口本身的核心能力是增量同步,如果你需要用到只拉取变更文件的特性,优先用这个方案:
- 调用接口时新增
$filter=file ne null参数,先从服务端过滤掉文件夹,只返回文件类型的项,减少返回数据量,接口示例:https://graph.microsoft.com/v1.0/me/drive/root/delta?$filter=file ne null - 拿到接口返回的
name字段后,在业务代码里判断后缀是否为.xlsx,过滤不符合要求的项即可。
方案2:不需要增量同步的前提下改用普通列表查询
如果你不需要增量拉取变更,只需要全量查询所有xlsx文件,可以改用普通的drive子项查询接口,这个接口完全支持endsWith筛选:https://graph.microsoft.com/v1.0/me/drive/root/children?$filter=endsWith(name,'.xlsx')
如果需要查询多级目录下的所有xlsx文件,可以加上$recurse=true参数(仅beta版支持)。
注意事项
- 目前v1.0和beta版的drive delta接口都不支持
endsWith、contains这类字符串匹配类筛选函数,无需尝试修改参数写法在服务端实现该类筛选。
内容的提问来源于stack exchange,提问作者ChsharpNewbie
相关产品推荐
相关产品推荐

