AddAsyn c (driveItem) не возвращает - PullRequest
0 голосов
/ 10 января 2020

.AddAsync(driveItem) в следующем коде никогда не возвращается. Может ли кто-нибудь пролить свет на это?

IPublicClientApplication publicClientApplication = PublicClientApplicationBuilder
    .Create(App.ClientId)
    .Build();

DeviceCodeProvider authProvider = new DeviceCodeProvider(
    publicClientApplication,
    new string[] { "Files.ReadWrite.All" });

GraphServiceClient graphClient = new GraphServiceClient(authProvider);
DriveItem driveItem = new DriveItem
{
    Name = "Foo",
    Folder = new Folder { },
    AdditionalData = new Dictionary<string, object>()
    { { "@microsoft.graph.conflictBehavior", "fail" }
    }
};
await graphClient
    .Me
    .Drive
    .Root
    .Children
    .Request()
    .AddAsync(driveItem);

[Edit 1]

Я пробовал имена папок, отличные от "Foo", пробовал имена существующих или не Существующие папки безрезультатны.

Я также пытался «переименовать» вместо «сбой» для «@ microsoft.graph.conflictBehavior», но безрезультатно.

Я также пытался без AdditionalData безрезультатно.
[Edit 2] Я решил подождать, пока метод вернется на некоторое время (более 10 минут), и он, наконец, выдал исключение:

Код: generalException Сообщение: ошибка произошла отправка запроса.

Источник "Microsoft.Graph.Core"

  at Microsoft.Graph.HttpProvider.<SendRequestAsync>d__19.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Graph.HttpProvider.<SendAsync>d__18.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Graph.BaseRequest.<SendRequestAsync>d__35.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Graph.BaseRequest.<SendAsync>d__31`1.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

Внутреннее исключение:

Код: generalException Сообщение: неожиданное исключение произошло при аутентификации запроса.

   at Microsoft.Graph.Auth.DeviceCodeProvider.<GetNewAccessTokenAsync>d__14.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Graph.Auth.DeviceCodeProvider.<AuthenticateRequestAsync>d__13.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Graph.AuthenticationHandler.<SendAsync>d__16.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Net.Http.HttpClient.<FinishSendAsyncBuffered>d__62.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Graph.HttpProvider.<SendRequestAsync>d__19.MoveNext()

[Edit 3]

Следующий код имеет точно такую ​​же проблему:

IDriveItemChildrenCollectionPage children = await graphClient.Me.Drive.Root.Children
    .Request()
    .GetAsync();

Это похоже на общую проблему для Graph SDK.

[Редактировать 4]

Я проиграл регистрацию приложения в Azure Active Directory и получил следующее самое внутреннее исключение:

AADSTS70000: The provided value for the input parameter 'device_code' is not valid.
Trace ID: 7067d5e9-d811-49ed-9b8b-7a0b9a0c4c00
Correlation ID: a4faa514-debc-47dc-8ef3-0b9853949e28
Timestamp: 2020-01-11 06:47:36Z

Опять же, я должен ждать более 10 минут для экс Бросить вызов.

[Редактировать 5] Не уверен, почему точно такие же вызовы с использованием Microsoft.Toolkit.Graph.Controls работают отлично.

await provider.Graph.Me.Drive.Root.Children
.Request()
.AddAsync(driveItem);

1 Ответ

0 голосов
/ 11 января 2020

Я не уверен, почему это не возвращается, но Camera Roll является одной из специальных папок (и, следовательно, зарезервированным именем папки). Существует небольшое число из них, которые автоматически генерируются либо при инициализации Drive, либо при первом подключении указанной службы c (т. Е. Приложение «Фотопленка» создается приложением OneDrive):

  • Документы
  • Фотографии
  • Фотопленка
  • Приложение Root
  • Musi c

Чтобы получить папку Camera Roll, вы запрашиваете ее по «id»:

GET /me/drive/special/cameraroll
...