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

如何通过REST API更新OneDrive项目属性?Graph API调用失败后的可行方案咨询

用SharePoint REST API更新OneDrive文件的系统属性(Created/Modified等)

你遇到的问题很典型——Graph API确实不允许直接修改Created、Modified这类系统只读字段,但你可以通过SharePoint REST API的ValidateUpdateListItem端点来实现,这和你用CSOM的ValidateUpdateListItem()方法原理完全一致。

具体步骤和请求示例

1. 提取文件的服务器相对路径

从你的OneDrive文件URL中,提取服务器相对路径:
/personal/alexw_vx13_onmicrosoft_com/Documents/SrcDir/File-To-Update.txt

2. 构造REST请求

使用POST方法调用列表项的ValidateUpdateListItem端点,以下是完整请求细节:

请求URL

https://vx13-my.sharepoint.com/personal/alexw_vx13_onmicrosoft_com/_api/web/GetFileByServerRelativeUrl('/personal/alexw_vx13_onmicrosoft_com/Documents/SrcDir/File-To-Update.txt')/ListItemAllFields/ValidateUpdateListItem

请求头

Content-Type: application/json;odata=verbose
Accept: application/json;odata=verbose
Authorization: Bearer {你的访问令牌}

请求体

{
  "formValues": [
    {
      "FieldName": "Created",
      "FieldValue": "2019-02-01T10:25:00Z"
    },
    {
      "FieldName": "Modified",
      "FieldValue": "2020-01-27T11:25:00Z"
    },
    {
      "FieldName": "Author",
      "FieldValue": "3"  // 填写目标用户的SharePoint数字ID,而非显示名称
    },
    {
      "FieldName": "Editor",
      "FieldValue": "3"
    },
    {
      "FieldName": "Created_x0020_By",
      "FieldValue": "3"
    },
    {
      "FieldName": "Modified_x0020_By",
      "FieldValue": "3"
    }
  ],
  "bNewDocumentUpdate": false
}

关键注意事项

  • 用户ID格式:Author、Editor等字段必须填写用户的SharePoint数字ID(可通过/_api/web/SiteUsers端点查询目标用户获取),不能用显示名称。
  • 时间格式要求:必须使用ISO 8601标准格式(如2019-02-01T10:25:00Z),不能用你之前使用的2019-02-01 10:25 AM格式。
  • 权限要求:你需要拥有足够的权限(比如站点管理员权限,或者“编辑所有项目”的特殊权限)才能修改这些系统级字段。

方法可行的原因

ValidateUpdateListItem是SharePoint专门设计的批量更新端点,它允许在权限充足的情况下绕过常规的只读字段限制——这也是你用CSOM方法能成功的核心原因。而Graph API出于平台设计限制,不支持直接修改这类系统字段,因此你之前的PATCH请求会返回accessDenied错误。

内容的提问来源于stack exchange,提问作者SO-User-vtas1409

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:23:15