簡體   English   中英

無法使用 Microsoft Graph API C# 代碼獲取部門名稱、經理等

[英]Unable to get Department Name , Manager etc using Microsoft Graph API C# Code

我正在使用以下代碼:

  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 等。Azure 應用程序注冊門戶中已提供 user.Read 等權限。 我也嘗試過 user.manager 打印詳細信息,但無法打印值。 我還附上了應用程序訪問的屏幕截圖。

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

directoryObject 在調試模式下顯示 displayName,但無法將 displayName 打印為 directoryObject.displayName。

請幫助,因為我無法獲取所需的詳細信息。

首先,您需要確保用戶有管理員。 您可以使用Microsoft Graph 資源管理器進行檢查。

在此處輸入圖片說明

然后,您需要調用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);

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM