Невозможно извлечь sAMAccountName из DirectoryObject с помощью MsGraph — .Net 4.8

Я столкнулся со странной ошибкой при извлечении некоторых свойств, отличных от значений по умолчанию, из DirectoryObject, и мне хотелось бы получить некоторые рекомендации.

Я использую следующее, чтобы получить менеджера для текущего пользователя

            GraphServiceClient graphServiceClient = this.GetGraphServiceClient();
            var managerInfo = await graphServiceClient.Me.Manager
                .Request()
                .Select("onPremisesSamAccountName,displayName,jobTitle,userPrincipalName,directreports")
                .GetAsync();

            user.ManagerUpperEmail = GetDirObjPropertyValue(manager, "UserPrincipalName");
            user.ManagerUpperName = GetDirObjPropertyValue(manager, "DisplayName");
            user.ManagerUpperID = GetDirObjPropertyValue(manager, "onPremisesSamAccountName");

и я могу видеть ВСЕ эти свойства, когда просматриваю объект ManagerInfo в инспекторе VS2019 (как показано ниже), но когда я пытаюсь получить к нему доступ, используя следующее, я получаю исключение NullReferenceException в назначении var3 из-за части, показанной в var2 возвращает ноль. Этого НЕ происходит при запуске одного и того же кода для свойств DisplayName и UserPrincipalName.

        private string GetDirObjPropertyValue(DirectoryObject dObj, string key)
        {
            var var1 = dObj.GetType();
            var var2 = dObj.GetType().GetProperty(key);
            var var3 = dObj.GetType().GetProperty(key).GetValue(dObj, null);
            return (String) dObj.GetType().GetProperty(key).GetValue(dObj, null);
        }

возвращая ноль в следующем. Это отлично работает для свойств по умолчанию, таких как DisplayName и UserPrincipalName.

В имени учитывается регистр? Как насчет OnPremisesSamAccountName в качестве ключа, где первая буква — заглавная. В вашем примере имена свойств различаются в зависимости от регистра.

Alois Kraus 25.02.2024 01:32

Возможно, но вы заметите, что все остальные свойства указаны строчными буквами в .Select(), но правильный регистр в вызовах GetDirObjPropertyValue. Хотя я попробую.

bregia 25.02.2024 01:35

Ты прав! Я думаю, что свойства, отличные от значений по умолчанию, немного более строги в этом отношении. Опубликуйте это как ответ, и я отмечу его как решенное вами. :-)

bregia 25.02.2024 01:37
Стоит ли изучать 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
3
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Имена свойств чувствительны к регистру. Вам нужно использовать OnPremisesSamAccountName вместо onPremisesSamAccountName.

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