Я столкнулся со странной ошибкой при извлечении некоторых свойств, отличных от значений по умолчанию, из 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.
Возможно, но вы заметите, что все остальные свойства указаны строчными буквами в .Select(), но правильный регистр в вызовах GetDirObjPropertyValue. Хотя я попробую.
Ты прав! Я думаю, что свойства, отличные от значений по умолчанию, немного более строги в этом отношении. Опубликуйте это как ответ, и я отмечу его как решенное вами. :-)
Имена свойств чувствительны к регистру.
Вам нужно использовать OnPremisesSamAccountName
вместо onPremisesSamAccountName
.
В имени учитывается регистр? Как насчет OnPremisesSamAccountName в качестве ключа, где первая буква — заглавная. В вашем примере имена свойств различаются в зависимости от регистра.