使用Graph SDK应用权限上传文件至SharePoint,如何指定修改人?
核心结论
可以在应用权限认证模式下,让上传/替换文件后的lastModifiedBy显示为指定用户,关键是通过添加X-MS-ACTASUSER请求头模拟用户操作。
必要前提
- 你的应用必须拥有**
Sites.FullControl.All**应用程序权限(或针对目标站点的Sites.FullControl权限),且已获得管理员同意。 - 你需要知道目标用户的UPN(如
user1@constone.com)或Azure AD用户ID。
修改后的代码实现
在原代码基础上,添加X-MS-ACTASUSER请求头即可:
public static async Task ReplaceFileInOneDriveAsync(GraphServiceClient gsc, string driveId, string itemId, MemoryStream memoryStream, string targetUserUpn) { memoryStream.Position = 0; var requestInformation = gsc.Drives[driveId].Items[itemId].Content.ToPutRequestInformation(memoryStream); // 添加模拟用户的请求头 requestInformation.Headers.Add("X-MS-ACTASUSER", targetUserUpn); // 追加冲突处理参数 requestInformation.URI = new Uri(requestInformation.URI.OriginalString + "?@microsoft.graph.conflictBehavior=replace"); var uploadResult = await gsc.RequestAdapter.SendAsync<DriveItem>(requestInformation, DriveItem.CreateFromDiscriminatorValue); }
关于Users路径的问题修复
你之前尝试的gsc.Users["user1@constone.com"].Drives["someID"]无法找到Items是因为路径错误:
- 用户的OneDrive对应的是单数
Drive(每个用户默认只有一个OneDrive),而非复数Drives。 - 正确路径应为:
// 访问指定用户OneDrive中的文件 gsc.Users["user1@constone.com"].Drive.Items["itemId"].Content...
同时,应用需要额外配置Files.ReadWrite.All应用程序权限(管理员同意后)才能访问用户的OneDrive。
内容的提问来源于stack exchange,提问作者John Park
相关产品推荐
相关产品推荐

