Скопируйте файл с помощью Microsoft Graph C# SDK - PullRequest
2 голосов
/ 14 января 2020

Я пытаюсь скопировать файл с диска на другой, используя C# SDK для Microsoft Graph, но получаю сообщение об ошибке, не знаю, как с ним справиться.

Это мой код:

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();
}

И вот ошибка, которую я получаю:

Код: "-1, Microsoft.SharePoint.Client.InvalidClientQueryException"

Сообщение: «Имя параметра не существует в методе GetById.»

Сейчас я использую жестко закодированное имя, но я также попытался отправить null в качестве параметра имени в Copy(), а также то же имя, что и исходный файл. Я получаю ту же ошибку, если отправляю исходное имя файла.

Если я отправляю null в качестве параметра имени, то получаю то же сообщение об ошибке, но оно говорит

"The параметр parentReference не существует в методе GetById. "

Любые предложения приветствуются!

1 Ответ

2 голосов
/ 15 января 2020

Ваш parentReference должен содержать идентификаторы для назначения , а не источника :

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();

Из документации :

Примечание: parentReference должно включать driveId и id параметры для папки target .

...