图 API:无法以编程方式上传具有特定属性的 OneDrive 项目(createdBy 和 lastModifiedDataTime 失败)

Graph API: Unable to programmatically upload OneDrive item with specific properties (failing for createdBy and lastModifiedDataTime)

我正在使用 Graph API 将项目上传到 OneDrive。成功上传后,我还在设置项目的属性。我可以设置“lastModifiedDateTime”,但无法设置“createdBy”和“createdDateTime”。

“createdBy”始终设置为我为 OAuth 创建的 Azure AD 应用程序,在 OneDrive 中 UI 它始终显示“修改者”“SharePoint 应用程序”。

并且“createdDataTime”始终是当前时间(上传时间)。有什么方法可以正确设置这些属性吗?

我用来修补项目属性的json:

{"createdDateTime":"2020-12-28T12:25:39Z",
  "lastModifiedDateTime":"2020-12-28T12:25:39Z",
  "createdBy":
  {
    "user":{
     "email":"AlexW@vx2.onmicrosoft.com"}
  },
  "lastModifiedBy":{
  "user":{
      "email":"AlexW@vx2.onmicrosoft.com"}
   },
   "fileSystemInfo":{
   "lastModifiedDateTime":"2020-12-28T12:25:39Z",
   "createdDateTime":"2020-12-28T12:25:39Z"},
   "file":{"mimeType":"image/jpeg"}
  }

请在上传和上述补丁请求后查找属性(来自 Graph Explorer 的查询):

        {
          "createdDateTime": "2020-12-28T12:28:09Z",
          "lastModifiedDateTime": "2020-12-28T12:25:39Z",
          "createdBy": 
           {
              "application": {
              "displayName": "ConsoleApp"}
           },
           "fileSystemInfo": {
              "createdDateTime": "2020-12-28T12:28:09Z",
              "lastModifiedDateTime": "2020-12-28T12:25:39Z"
           },
           "file": {
              "mimeType": "image/jpeg",
              "hashes": {
                 "quickXorHash": "4EQEGnBnLd04VXEmYqGHHIeZ2po="
            }
           }
          }

如您所见,用户名已替换为 Azure AD 应用名称,创建时间是上传完成的时间,而不是补丁请求中指定的时间。

如果有人对此有任何想法,请告诉我。

如果您参考以下文章:属性部分下的https://docs.microsoft.com/en-us/graph/api/resources/driveitem?view=graph-rest-1.0

这些是 read-only 字段,这意味着您将无法手动配置相同的值。

解决方法:

话虽如此,这无法通过 Graph API 实现,但是您可以使用 Sharepoint API 对其进行更新。

ValidateUpdateListItem()

对于修改创建者、最后修改者和最后修改者,示例主体如下:

{   formValues": [

            {

               "FieldName": "Editor",
               "FieldValue": "[{'Key':'i:0#.w|AlexW@vx2.onmicrosoft.com'}]"

            },

         {  

               "FieldName": "Author",
               "FieldValue": "[{'Key':'i:0#.w|AlexW@vx2.onmicrosoft.com'}]"

            },
            {

               "FieldName": "Created",
               "FieldValue": "02/18/2020 11:25 PM"

            }
],
  "bNewDocumentUpdate": true 
}
 

请求URL:

https://SPOURL/_api/web/Lists/GetbyTitle('Library Name')/items(1)/ValidateUpdateListItem"