如何通过REST API更新OneDrive项目属性?Graph API调用失败后的可行方案咨询
你遇到的问题很典型——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
相关产品推荐
相关产品推荐

