Есть ли способ получить удаленные элементы каталога из Microsoft Graph API с помощью C # SDK?

#microsoft-graph-api #microsoft-graph-sdks

#microsoft-graph-api #microsoft-graph-sdks

Вопрос:

Есть страница документа, описывающая точную вещь, которую я хочу сделать

https://learn.microsoft.com/en-us/graph/api/directory-deleteditems-list?view=graph-rest-1.0amp;tabs=http

Однако предлагаемый способ извлечения этих данных в C #

 GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var group = await graphClient.Directory.DeletedItems
    .Request()
    .GetAsync(); 
  

Я попытался использовать это и получил ошибку неправильного запроса из-за не указания типа элемента для просмотра. Кажется, я не могу найти способ указать это в C # SDK.

для справки, вот как это делается в Java SDK

 IGroupCollectionPage group = graphClient.directory().deletedItems().microsoft.graph.group()
    .buildRequest()
    .get();
  

Ответ №1:

В Github возникает аналогичная проблема, которая будет соответствующим образом обновлена

Для решения проблемы вы можете использовать приведенный ниже код

  var deletedGroupReq = await graphClient.Directory.DeletedItems["microsoft.graph.group"]
                        .Request()
                        .Select("DisplayName,DeletedDateTime")
                        .GetAsync();
                    var deletedGroups = graphClient.HttpProvider.Serializer.DeserializeObject<IGraphServiceGroupsCollectionPage>(deletedGroupReq.AdditionalData["value"].ToString());
    
                    Console.WriteLine(JsonConvert.SerializeObject(deletedGroups));
  

Комментарии:

1. Это обходное решение перестало работать? Я некоторое время эффективно использовал это, но в последнее время это начало приводить к исключению нулевой ссылки

Ответ №2:

Согласно коду из проблемы.ЧИСТЫЙ пример для deleteditems кажется неправильным, я получил следующий код:

 async Task<List<DirectoryObject>> ExecuteMsGraphHttpCallForDeletedObjects(string directoryObjectType)
{
    var all = new List<DirectoryObject>();

    var groupItemsUrl = graphClient.Directory.DeletedItems.AppendSegmentToRequestUrl(directoryObjectType);
    var currentSet = await (new DirectoryDeletedItemsCollectionRequestBuilder(groupItemsUrl, graphClient)).Request().GetAsync();

    while (currentSet.Count > 0)
    {
        all.AddRange(currentSet.CurrentPage);

        if (currentSet.NextPageRequest != null)
        {
            currentSet = await currentSet.NextPageRequest.GetAsync();
        }
        else
        {
            break;
        }
    }

    return all;
}