C # MsGraph-SDK: отправка BatchRequest для получения ссылок менеджера с помощью Microsoft Graph SDK - PullRequest
1 голос
/ 18 октября 2019

Прежде всего, пожалуйста, поделитесь, есть ли где-нибудь официальная документация MSGraph SDK, которую я могу использовать для справки.

У меня есть сценарий, в котором я хочу запросить все ссылки на менеджеров и участников из AAD без предоставленияuser и group objectID соответственно. В настоящее время это поддерживается в канале DQ, то есть я могу сделать что-то вроде этого, используя MsGraphSDK:

MsGraphClient.Users.Delta().Request().Select("manager")

ИЛИ

MsGraphClient.Groups.Delta().Request().Select("members")

Я не хочу использовать DQ для начальной синхронизации из-запроблемы с производительностью и другие вопросы. Мой запасной вариант - запросить напрямую через Graph, поэтому я хочу сделать что-то вроде следующего, но это не даст никакого результата:

MsGraphClient.Users.Request().Select("manager")

ИЛИ

MsGraphClient.Groups.Request().Select("members")

Это выглядиткак это даже не поддерживается в настоящее время на нижнем (AADGraph) слое. Пожалуйста, исправьте меня, если я ошибаюсь, и предоставьте решение, если таковое есть!

Поэтому мой запасной подход заключается в извлечении всех пользовательских и групповых aadObjectIds и явном запросе ссылок на менеджера и участников соответственно.

В моем случае в AAD могут потенциально находиться 500 тыс. Пользовательских объектов, и я хочу не делать 500 тыс. Отдельных вызовов GetManager в AAD. Вместо этого я хочу как можно больше группировать запросы Graph.

Мне не удалось найти большую помощь в Интернете при отправке пакетных запросов через SDK. Вот что я делаю:

У меня есть этот BatchRequestContent:

var batchRequestContent = new BatchRequestContent();
foreach (string aadObjectId in aadObjectIds)
{
    batchRequestContent.AddBatchRequestStep(new BatchRequestStep(aadObjectId, Client.Users[aadObjectId].Manager.Request().GetHttpRequestMessage()));
}

, и я пытаюсь отправить BatchRequest через GraphSDK с этим содержимым, чтобы получить BatchResponse. Это в настоящее время поддерживается в SDK? Если да, то какова процедура? Любая документация или пример? Как прочитать пакетный ответ обратно? Наконец, есть ли ограничение на количество запросов в пакете?

Спасибо,

1 Ответ

0 голосов
/ 18 октября 2019

Вот соответствующая запись: $ expand = manager не раскрывает менеджер

$ expand в настоящее время не поддерживается для отношений manager и directReports в конечной точке v1.0. Это поддержка в конечной точке бета-версии, но API возвращает много ненужной информации: https://graph.microsoft.com/beta/users?$expand=manager

В настоящее время клиентская библиотека частично поддерживает пакетную обработку, хотя у нас есть пара запросов на извлечение, чтобы обеспечить лучшую поддержкуследующий выпуск (PR 1 и 2 ).

Чтобы использовать пакет с текущей библиотекой и вашим аутентифицированным клиентом, вы сделаете что-то вроде этого:

var authProv = MsGraphClient.AuthenticationProvider;
var httpClient = GraphClientFactory.Create(authProv);

// Send batch request with BatchRequestContent.
HttpResponseMessage response = await httpClient.PostAsync("https://graph.microsoft.com/v1.0/$batch", batchRequestContent);

// Handle http responses using BatchResponseContent.
BatchResponseContent batchResponseContent = new BatchResponseContent(response);
...