Клиент MS Graph API - не удается заставить Expand работать в запросах - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь расширить все элементы диска MS Teams (библиотека документов SharePoint) с помощью Graph API.

Я могу получить доступ к команде (группе), но не могу напрямую расширить коллекцию Items. Было бы здорово, если бы это было возможно, поэтому мне не нужен другой запрос для этого (производительность!).

Согласно документации, есть опция $ expand =, в C# у меня есть Expand () метод расширения. К сожалению, я не могу найти ни одного рабочего примера, как его использовать. Что ж, в официальной документации есть один пример:

 string messageId = "<guid>";
 Message message = await graphClient.Me.Messages[messageId]
            .Request()
            .Expand("attachments")
            .GetAsync();

Но я не могу успешно воспроизвести его. Свойством должно быть «Items», поэтому я думаю, мне следует использовать «items» в нижнем регистре (но я также пробовал это с «Items»).

Вот teamsDrive, когда я не буду ничего расширять , вы видите, что свойства - "Null" (в нем должны быть элементы, документы присутствуют в библиотеке):

teamDrive
{Microsoft.Graph.Drive}
Activities [IDriveActivitiesCollectionPage]:null
AdditionalData [IDictionary]:Count = 3
Bundles [IDriveBundlesCollectionPage]:null
CreatedBy:{Microsoft.Graph.IdentitySet}
CreatedByUser [User]:null
CreatedDateTime:{30/05/2020 23:46:46 +00:00}
Description [string]:""
DriveType [string]:"documentLibrary"
ETag [string]:null
Following [IDriveFollowingCollectionPage]:null
Id [string]:"b!QXf1ydGT80WWzfKB0A5IvAkI2isDR2NEh9jgSseDzmFpXz0eAriVS6TXSBEiZhVP"
Items [IDriveItemsCollectionPage]:null
LastModifiedBy [IdentitySet]:null
LastModifiedByUser [User]:null

Итак, я попробовал следующее:

var teamDrive = await graphClient.Groups[group.Id].Drive.Request().Expand("items").GetAsync();

Но это дает мне исключение:

Status Code: BadRequest
Microsoft.Graph.ServiceException: Code: invalidRequest
Message: The request is malformed or incorrect.
Inner error:
    AdditionalData:
    request-id: 93ab7efd-0a33-4ff0-800e-d7e95acd8eb4
    date: 2020-06-17T08:41:39
ClientRequestId: 93ab7efd-0a33-4ff0-800e-d7e95acd8eb4

   at Microsoft.Graph.HttpProvider.SendAsync(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)

Я использую конечную точку BETA Graph (https://graph.microsoft.com с использованием токена доступа, полученного из https://login.microsoftonline.com/ {наш идентификатор клиента }) с пакетом NuGet Microsoft.Graph.Beta (версия 0.18.0-preview - последняя версия).

Обратите внимание, что я не использую в этом запросе какие-либо операторы select или filter, как уже упоминалось другими что это запрещено при расширении: Расширение и фильтрация MS Graph API не работает

1 Ответ

0 голосов
/ 17 июня 2020

Хорошо, я обнаружил, что было не так в моем запросе.

Коллекцию Items можно использовать только тогда, когда я хочу получить доступ к одному элементу. Когда я хочу получить доступ к коллекции элементов (ко всем элементам коллекции), я должен расширить свойство Root диска. Это свойство Root затем имеет свойство Children, содержащее элементы в папке root на накопителе (примечание: оно не содержит всех элементов библиотеки документов, только элементы папки верхнего уровня).

По сути, это означает, что я могу использовать:

var teamDrive = await graphClient.Groups[group.Id].Drive.Request().Expand(d => d.Root).GetAsync();

А затем могу перебирать дочерние элементы с помощью: foreach(var childItem in teamDrive.Root.Children) { ... }

Следующие темы помогли найти решение:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...