You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Microsoft Graph API以最少的API请求获取版本列表和单个版本

Microsoft Graph API以最少的API请求获取版本列表和单个版本

我来帮你理清楚怎么用Microsoft Graph API高效搞定这两个需求——获取单个文件版本和全量版本列表,同时解决你遇到的ItemWithPath()返回类型的小困惑。

首先,你碰到的ListItemVersionCollectionResponse完全是正常情况:当用ItemWithPath()定位到目标文件后,调用.Versions本质是请求该文件的所有版本集合,Graph SDK就会返回这个封装类,它里面的CurrentPage属性就是你要的所有版本数据,直接取这个属性转成你自定义的Version对象集合就行。

接下来分场景说具体实现,全程都是单次API请求搞定,不用多做额外查询:

获取全量版本列表

  • 通过文件ID查询:
    直接链式调用版本集合接口,一次请求拿到所有版本:

    var versionCollectionResponse = await graphClient.Sites[siteId]
        .Drives[driveId]
        .Items[itemId]
        .Versions
        .Request()
        .GetAsync();
    // 转成你的自定义Version对象
    var yourVersionList = versionCollectionResponse.CurrentPage.Select(v => new YourVersionObject
    {
        VersionId = v.Id,
        Creator = v.CreatedBy?.User?.DisplayName,
        CreateTime = v.CreatedDateTime,
        // 按需映射其他属性,比如版本备注、文件大小等
    }).ToList();
    
  • 通过文件路径查询:
    用ItemWithPath()定位文件后直接请求版本集合,同样单次请求:

    var versionCollectionResponse = await graphClient.Sites[siteId]
        .Drives[driveId]
        .Root
        .ItemWithPath("/你的文件路径/比如项目文档/Report.docx")
        .Versions
        .Request()
        .GetAsync();
    // 同样从CurrentPage转成自定义对象
    var yourVersionList = versionCollectionResponse.CurrentPage.Select(v => new YourVersionObject
    {
        // 按需映射属性
    }).ToList();
    

获取单个指定版本

这里核心是:不用先拿全量版本列表再筛选,直接在请求链里追加版本ID,单次请求就能拿到目标版本。

  • 通过文件ID+版本ID查询:

    var singleVersion = await graphClient.Sites[siteId]
        .Drives[driveId]
        .Items[itemId]
        .Versions[targetVersionId]
        .Request()
        .GetAsync();
    // 转成你的自定义Version对象
    var yourSingleVersion = new YourVersionObject
    {
        VersionId = singleVersion.Id,
        Creator = singleVersion.CreatedBy?.User?.DisplayName,
        CreateTime = singleVersion.CreatedDateTime,
        // 按需映射其他属性
    };
    
  • 通过文件路径+版本ID查询:
    先定位文件再指定版本ID,还是单次请求:

    var singleVersion = await graphClient.Sites[siteId]
        .Drives[driveId]
        .Root
        .ItemWithPath("/你的文件路径/比如项目文档/Report.docx")
        .Versions[targetVersionId]
        .Request()
        .GetAsync();
    // 转成自定义对象
    var yourSingleVersion = new YourVersionObject
    {
        // 按需映射属性
    };
    

最后提个小技巧:如果你的自定义Version对象需要映射的属性比较多,可以用AutoMapper这类工具或者自己写个扩展方法来简化映射逻辑,省得手动一个个赋值。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:39:36