.Request() не работает на C# с Azure AD B2C

У меня есть приложение администратора, написанное на C# с расширением Microsoft.Graph.Beta, и оно использует .Request(), чтобы разрешить просмотр и поиск пользователей из B2C. У меня есть отдельное приложение, которое использует новые 5.52.0 Microsoft Graph и Azure.Identity, которые можно использовать для добавления и обновляйте пользователей в B2C, используя метод Users.PostAsync. Поскольку это более безопасное приложение, мне нужно перенести функции первого приложения, но новый Graph, похоже, сделал .Request() избыточным, что является единственным известным мне методом получения данных из B2C.

Вот код просмотра из первого приложения -

 public static async Task ListUsers(GraphServiceClient graphClient)
 {
     Console.WriteLine("Getting list of users...");

     // Get all users (one page)
     var result = await graphClient.Users
         .Request()
         .Select(e => new
         {
             e.DisplayName,
             e.Id,
             e.Identities,
             e.BusinessPhones
         })
         .GetAsync();

     // Calculate maximum lengths
     int maxDisplayNameLength = result.CurrentPage.Max(u => u.DisplayName.Length);
     int maxIdLength = result.CurrentPage.Max(u => u.Id.Length);
     int maxEmailLength = result.CurrentPage
         .Where(u => u.Identities.Any(i => i.SignInType == "emailAddress")) // Filter users with email addresses
         .Select(u => u.Identities.FirstOrDefault(i => i.SignInType == "emailAddress")?.IssuerAssignedId)
         .Where(email => email != null)
         .Max(email => email.Length);

     bool isFirst = true;

     foreach (var user in result.CurrentPage)
     {
         // Get email if available
         string email = user.Identities.FirstOrDefault(i => i.SignInType == "emailAddress")?.IssuerAssignedId;

         // If user has no email, skip to the next iteration
         if (email == null)
             continue;

         // Get phone numbers
         string phoneNumbers = string.Join(", ", user.BusinessPhones);

         if (isFirst)
         {
             Console.WriteLine("------------------------");
             isFirst = false;
         }

         // Format output with alignment based on maximum lengths
         Console.WriteLine($"DisplayName: {user.DisplayName.PadRight(maxDisplayNameLength)}");
         Console.WriteLine($"Id: {user.Id.PadRight(maxIdLength)}");
         Console.WriteLine($"Email: {email?.PadRight(maxEmailLength) ?? string.Empty}");
         Console.WriteLine($"Phone Numbers: {phoneNumbers}"); // Display phone numbers
         Console.WriteLine("------------------------"); // Add a line separator
     }
 }

Это работает безупречно в старой версии Graph, но мне нужно перенести его в новое приложение по соображениям безопасности. Ниже представлена ​​попытка использовать ту же логику в новом приложении, и если ее запустить, вы заметите, что она выдает ошибки, связанные с .Request() -

`static async Task ListUsers()
        {
            var scopes = new[] { "https://graph.microsoft.com/.default" };
            var tenantId = "...";
            var clientId = "...";
            var clientSecret = "...";

            var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);
            var graphClient = new GraphServiceClient(clientSecretCredential, scopes);

            try
            {
                // Retrieve users from Microsoft Graph
                var users = await graphClient.Users.Request().GetAsync();

                // Display user details
                foreach (var user in users)
                {
                    Console.WriteLine($"Display Name: {user.DisplayName}");
                    Console.WriteLine($"Given Name: {user.GivenName}");
                    Console.WriteLine($"Surname: {user.Surname}");
                    Console.WriteLine($"Email Address: {user.Mail}");
                    Console.WriteLine($"Business Phone Number: {user.BusinessPhones?[0]}");
                    Console.WriteLine();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error listing users: {ex.Message}");
            }
        }`

Есть ли в современном Graph новый метод для замены этого?

В последних версиях модуля Microsoft Graph Request() удален и выдает ошибку. Чтобы устранить ошибку, не передавайте Request()

Rukmini 16.05.2024 10:32

Спасибо, да, я в курсе, ищу альтернативу, если она известна.

ThomasLDev 16.05.2024 10:38

AFAIK альтернативы нет, это зависит от версии

Rukmini 16.05.2024 10:39

так современный Graph не может получить данные из B2C? Это не кажется логичным.

ThomasLDev 16.05.2024 10:41

Он может получить данные, изменив код, используя await graphClient.Users.GetAsync();

Rukmini 16.05.2024 10:41

Проверьте это github.com/microsoftgraph/msgraph-sdk-dotnet/blob/feature/5.‌​0/…

Rukmini 16.05.2024 10:42

это затем выдает ошибку в верхней части цикла foreach. Оператор foreach CS1579 не может работать с переменными типа UserCollectionResponse, поскольку UserCollectionResponse не содержит общедоступного экземпляра или определения расширения для GetEnumerator.

ThomasLDev 16.05.2024 10:44

Опубликую ответ с правильным кодом

Rukmini 16.05.2024 10:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обратите внимание: Request() удален из последней версии Microsoft Graph, поэтому вам необходимо удалить Request() из кода, чтобы устранить ошибку. Обратитесь к этому блогу GitHub.

Чтобы устранить ошибку, измените код, как показано ниже:

using Microsoft.Graph;
using Azure.Identity;

class Program
{
    static async Task Main()
    {
        string tenantId = "TenantID";
        string clientId = "ClientID";
        string clientSecret = "ClientSecret";
        var clientSecretCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);

        var graphClient = new GraphServiceClient(clientSecretCredential);

        try
        {

            var users = await graphClient.Users.GetAsync((requestConfiguration) =>
            {
                requestConfiguration.QueryParameters.Select = new string[] { "displayName", "GivenName", "Surname", "Mail" };
            });

            foreach (var user in users.Value)
            {
                Console.WriteLine($"Display Name: {user.DisplayName}");
                Console.WriteLine($"Given Name: {user.GivenName}");
                Console.WriteLine($"Surname: {user.Surname}");
                Console.WriteLine($"Street Address: {user.Mail}");
                Console.WriteLine(" ");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error listing users: {ex.Message}");
        }
    }
}

Ты абсолютный гений, я не могу отблагодарить тебя!!

ThomasLDev 16.05.2024 11:46

Другие вопросы по теме

Похожие вопросы