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

使用Graph SDK应用权限上传文件至SharePoint,如何指定修改人?

解决方案:应用权限下指定SharePoint文件lastModifiedBy用户

核心结论

可以在应用权限认证模式下,让上传/替换文件后的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:48:18