使用 Microsoft Graph C# SDK 复制文件

Copy a file using Microsoft Graph C# SDK

我正在尝试使用适用于 Microsoft Graph 的 C# SDK 将一个文件从一个驱动器复制到另一个驱动器,但我收到一个错误,我不确定如何处理。

这是我的代码:

public async Task CopyFile(CopyDriveFileCommand c)
{
    var graphClient = CreateDelegatedGraphClient(c.Token);

    var oldDrive = await graphClient
        .Groups[c.OldGroupId]
        .Drive
        .Request()
        .Select("id")
        .GetAsync();

    var parentReference = new ItemReference
    {
        DriveId = oldDrive.Id,
        Id = c.FileToCopyId
    };

    var result = await graphClient
        .Groups[c.NewGroupId]
        .Drive
        .Root
        .ItemWithPath(c.NewPath)
        .Copy("test.png", parentReference)
        .Request()
        .PostAsync();
}

这是我得到的错误:

Code: "-1, Microsoft.SharePoint.Client.InvalidClientQueryException"

Message: "The parameter name does not exist in method GetById."

我现在使用的是硬编码名称,但我也尝试过发送 null 作为 Copy() 中的名称参数,并且与原始文件的名称相同。 如果我发送原始文件名,我会得到同样的错误。

如果我将 null 作为名称参数发送,则会收到相同的错误消息,但它显示

"The parameter parentReference does not exist in method GetById."

非常感谢任何建议!

您的 parentReference 应该包含 目的地 的 ID,而不是 来源 :

var parentReference = new ItemReference
{
    DriveId = "Destination Drive Id",
    Id = "Destination Folder Id"
};

然后您通过导航到源并将其复制到目标来复制文件:

var result = await graphClient
    .Groups[c.OldGroupId]
    .Drive
    .Items[c.FileToCopyId]
    .Copy("test.png", parentReference)
    .Request()
    .PostAsync();

来自documentation

Note: The parentReference should include the driveId and id parameters for the target folder.