使用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
相关产品推荐
相关产品推荐

