如何用C#的Microsoft Graph API/SDK按创建日期查询SharePoint租户新站点
针对租户站点数量超5万的场景,核心思路是利用Graph API的filter参数基于创建时间范围精准筛选,避免全量枚举。以下分两种场景给出具体实现:
一、租户级查询新建网站集(顶层站点)
直接调用租户级sites端点,通过createdDateTime限定时间区间:
GET https://graph.microsoft.com/v1.0/sites?filter=createdDateTime ge '{上次查询结束时间(ISO 8601 UTC)}' and createdDateTime le '{当前查询时间(ISO 8601 UTC)}'&select=id,displayName,createdDateTime,webUrl
- 细节说明:
- 时间格式必须为
yyyy-MM-ddTHH:mm:ssZ(如2024-05-20T14:30:00Z),确保时区统一。 - 使用
select参数仅返回必要字段,降低数据传输量。 - 处理分页:若结果超过100条,需通过响应中的
@odata.nextLink遍历所有页。
- 时间格式必须为
二、查询网站集内新建子站点
子站点属于网站集下的次级节点,需针对目标网站集单独查询,同样用时间筛选:
GET https://graph.microsoft.com/v1.0/sites/{site-id}/sites?filter=createdDateTime ge '{上次查询该网站集的时间}' and createdDateTime le '{当前查询时间}'&select=id,displayName,createdDateTime,webUrl
- 优化策略:
- 仅对上次查询后新建的网站集执行子站点查询,存量网站集可按周期(如每5分钟)轮询,记录每个网站集的查询时间点。
- 批量处理:通过Graph API的
$batch接口批量请求多个网站集的子站点数据,减少HTTP请求次数。
关键注意事项
- 权限要求:需配置
Sites.Read.All(只读)或Sites.ReadWrite.All(读写)应用权限,适合后台定时任务的授权模式。 - 去重与防遗漏:每次查询结束后,记录当前时间作为下次查询的起始时间,确保时间区间连续无重叠。
- 性能验证:若时间窗口内结果仍较多,可进一步缩小查询间隔(如调整为3分钟),或结合
orderBy=createdDateTime desc优先获取最新站点。
内容的提问来源于stack exchange,提问作者A X
相关产品推荐
相关产品推荐

