Невозможно получить Название отдела, Менеджер и т. Д. c с помощью Microsoft Graph API C# Код - PullRequest
2 голосов
/ 24 февраля 2020

Я использую следующий код:

  using Microsoft.Graph;
    using Microsoft.Identity.Client;
    using System;

    namespace MSGraphAPI
    {
        class Program
        {


            private static string clientId = "XXX";


            private static string tenantID = "XXXX";


            private static string objectId = "XXXX";


            private static string clientSecret = "XXXXX";

            static async System.Threading.Tasks.Task Main(string[] args)
            {

                int Flag = 0;
                var tenantId = "XXX.onmicrosoft.com";

                var clientId = "XXXXX";

                var clientSecret = "XXXXX"; // Or some other secure place.

                var scopes = new string[] { "https://graph.microsoft.com/.default" };

                // Configure the MSAL client as a confidential client
                var confidentialClient = ConfidentialClientApplicationBuilder
                    .Create(clientId)
                    .WithAuthority($"https://login.microsoftonline.com/XXX.onmicrosoft.com/v2.0")
                    .WithClientSecret(clientSecret)
                    .Build();


                GraphServiceClient graphServiceClient =
                    new GraphServiceClient(new DelegateAuthenticationProvider(async (requestMessage) => {

            // Retrieve an access token for Microsoft Graph (gets a fresh token if needed).
            var authResult = await confidentialClient
                .AcquireTokenForClient(scopes)
                .ExecuteAsync();

            // Add the access token in the Authorization header of the API request.
            requestMessage.Headers.Authorization =
                new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
                    })
                    );


                var users = await graphServiceClient.Users.Request().GetAsync();


                do
                {
                            foreach (User user in users)
                            {    

                            Console.WriteLine(user.DisplayName);
                            Console.WriteLine(user.MobilePhone);
                            Console.WriteLine(user.BusinessPhones);
                            Console.WriteLine(user.DirectReports);
                            Console.WriteLine(user.Manager);    
                            var directoryObject = await graphClient.Users[user.userPrincipalName].Manager
    .Request()
    .GetAsync();

  foreach (User user1 in directoryObject )
                        {
// unable to print using user1.displayName

                        }
                            }
                        }
                        while (users.NextPageRequest != null && (users = await users.NextPageRequest.GetAsync()).Count > 0);

                        Console.WriteLine("------");

            }
        }
    }

Но я не могу получить directReports или любого пользователя, я могу получить DisplayName et c. Разрешение для пользователя. Read et c уже предоставлено на портале регистрации приложений Azure. Я попытался user.manager также напечатать детали, но не смог напечатать значение. Я приложил скриншот также для доступа к приложению.

var directoryObject = await graphClient.Users["{id|userPrincipalName}"].Manager
    .Request()
    .GetAsync();

directoryObject показывает displayName в режиме отладки, но не может напечатать displayName как directoryObject.displayName.

Пожалуйста, помогите, поскольку я не могу получить необходимую деталь.

1 Ответ

0 голосов
/ 25 февраля 2020

Прежде всего, необходимо убедиться, что у пользователя есть менеджер. Вы можете использовать Microsoft Graph Explorer , чтобы проверить его.

enter image description here

Затем вам нужно позвонить graphClient.Users["{id|userPrincipalName}"].Manager, чтобы получить менеджер.

var user =  graphServiceClient.Users["user@XX.onmicrosoft.com"].Request().GetAsync().Result;
            var manager = (User) graphServiceClient.Users["user@XX.onmicrosoft.com"].Manager.Request().GetAsync().Result;
            Console.WriteLine("user_displayName: "+user.DisplayName);
            Console.WriteLine("manager_displayName: "+manager.DisplayName);

enter image description here

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