InvalidRequest在驱动器之间移动DriveItem



我试图将位于父SharePoint站点根驱动器中的DriveItem移动到子站点。

父站点:mydomain.sharepoint.com/sites/Graph- List: Documents

子站点mydomain.sharepoint.com/sites/Graph/SubwebA- List: Documents

我正在使用Microsoft Graph SDK v3.25.0:

var client = GetGraphClient();
var destDriveItem = new DriveItem
{
ParentReference = new ItemReference
{
DriveId = destDriveID,
Id = destDriveFolderID
}
};
var response = await client
.Drives[driveID]
.Items[sourceDriveItemID]
.Request()
.UpdateAsync(destDriveItem);

所有id都有效,但UpdateAsync返回此错误:

ServiceException: Code: invalidRequest
Message: Requested move requires an async response, add 'Prefer: respond-async' to allow
Inner error:
AdditionalData:
date: 2021-03-04T15:44:38
request-id: 2aa656e2-fc4b-4314-846b-b62680a15ece
client-request-id: 2aa656e2-fc4b-4314-846b-b62680a15ece
ClientRequestId: 2aa656e2-fc4b-4314-846b-b62680a15ece
at Microsoft.Graph.HttpProvider.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
at Microsoft.Graph.BaseRequest.SendRequestAsync(Object serializableObject, CancellationToken cancellationToken, HttpCompletionOption completionOption)
at Microsoft.Graph.BaseRequest.SendAsync[T](Object serializableObject, CancellationToken cancellationToken, HttpCompletionOption completionOption)
at Microsoft.Graph.DriveItemRequest.UpdateAsync(DriveItem driveItemToUpdate, CancellationToken cancellationToken)
at GraphToM365Test.Program.MoveDriveItemToDestinationAndBack(String sourceDriveItemId) in C:DevStratusAppsGraphToM365TestGraphToM365TestProgram.cs:line 166
at GraphToM365Test.Program.MainAsync(String[] args) in C:DevStratusAppsGraphToM365TestGraphToM365TestProgram.cs:line 62

如果我在同一站点的两个Drives(文档库)之间移动DriveItem,则相同的代码可以工作。

这个问题可能与这个GitHub问题有关(尽管这是为了在同一个网站上移动)

这是一个不支持的操作。来自文档:

项不能使用此请求在驱动器之间移动。

相反,您需要进行两次调用:

  1. 将文件复制到新位置
  2. 从旧位置删除文件
var client = GetGraphClient();
var parentReference = new ItemReference
{
DriveId = destDriveID,
Id = destDriveFolderID
};
var copyResponse = await client
.Drives[driveID]
.Items[sourceDriveItemID]
.Copy(name, parentReference)
.Request()
.PostAsync();
var deleteResponse = await client
.Drives[driveID]
.Items[sourceDriveItemID]
.Request()
.DeleteAsync();

最新更新