Microsoft Graph SDK .NET - получите пользователей с менеджерами и дополнительными полями - PullRequest
0 голосов
/ 11 июня 2019

Я хочу получить всех пользователей графиков с их менеджерами и некоторыми полями не по умолчанию в моем приложении ASP.NET Core 2.2.Для этого я написал следующий код:

        graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider(async request =>
        {
            request.Headers.Authorization = new AuthenticationHeaderValue("bearer", await tokenProvider.GetToken());
        }));

        var page = await graphServiceClient.Users
            .Request()
            .Expand(e => e.Manager)
            .Select(e => new
            {
                e.Department,
                e.OfficeLocation,
                e.JobTitle,
                e.UserPrincipalName,
                e.Mail,
                e.GivenName,
                e.DisplayName,
                e.Surname,
                e.MobilePhone,
                e.Id,
                e.EmployeeId
            })
            .GetAsync();

После этого запроса для каждого пользователя оба поля Manager и EmployeeId являются пустыми.Я могу получить эту информацию напрямую из API, используя конечные точки / manager и / user с параметром /? Select = extension_88b64915d0de49799c8e36460702b34d_employeeNumber с тем же токеном авторизации, но я хочу использовать SDK и сделать один запрос.

Какя могу сделать это в одном запросе с SDK?

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Я искал классы и методы Microsoft Graph SDK без особой удачи.В любом случае, если в ваших классах и методах Microsoft Graph SDK вы не нашли ничего, что делает это за вас за одну операцию, это связано с тем, что методы в SDK и API должны иметь одну ответственность (если метод получает пользователей, он ничего не будет делать).еще хотелось получить своих менеджеров).Также я читал, что SDK всегда немного отстает от текущего состояния API, и если вы хотите получить доступ к последним функциям, вы должны использовать httpClient.

Решение : реализовать свой собственный метод с необходимымилогика и заполнить нужную информацию с помощью текущих методов SDK или с помощью httpClient для вызова Graph API

Я нашел пару примеров, которые вам, вероятно, знакомы: https://developer.microsoft.com/en-us/graph/graph-explorer

0 голосов
/ 12 июня 2019

К сожалению, на данный момент поиск пользователей вместе с менеджерами не поддерживается с помощью одного запроса, но вместо этого можно рассмотреть следующий подход:

a) отправьте первый запрос на получение пользователей через List users конечную точку

b) создать и отправить пакетный запрос для извлечения менеджеров пользователя через List manager конечную точку :

POST https://graph.microsoft.com/v1.0/$batch
Accept: application/json
Content-Type: application/json

{
  "requests": [
    {
      "id": "1",
      "method": "GET",
      "url": "/users/{id1 | userPrincipalName1}/manager"
    },
    {
      "id": "2",
      "method": "GET",
      "url": "/users/{id2 | userPrincipalName2}/manager"
    },
    //...
   ]
}

Вот пример для msgraph-sdk-dotnet:

//1. get user properties 
var users = await graphClient.Users
     .Request()
     .Select(e => new
                {
                    e.Department,
                    e.OfficeLocation,
                    e.JobTitle,
                    e.UserPrincipalName,
                    e.Mail,
                    e.GivenName,
                    e.DisplayName,
                    e.Surname,
                    e.MobilePhone,
                    e.Id,
                    e.EmployeeId
                })
      .GetAsync();


//2 get user's managers
var batchRequest = new BatchRequest();
foreach (var user in users)
{             
    batchRequest.AddQuery(graphClient.Users[user.UserPrincipalName].Manager.Request(), typeof(Microsoft.Graph.User));
}
var managers = await graphClient.GetBatchAsync(batchRequest);
foreach(var manager in managers)
{
   if (manager != null)
   {
       //...
   }
}

где BatchRequest class - это пользовательский класс, который реализует поддержку пакетирования JSON.

...