Я пытался найти способ получить некоторые атрибуты от пользователя Active Directory, которых нет в объекте UserPrincipal
по умолчанию. При поиске ответа я наткнулся на этот вопрос. Я уверен, что ответ, опубликованный @marc_s, правильный, по крайней мере, он очень полезен. Из-за его полезности я создал класс UserPrincipalEx
и сделал все, как предложил @marc_s в своем ответе. Сам класс, кажется, определен правильно, за исключением того факта, что мой расширенный атрибут, в данном случае title
, всегда возвращает пустую строку. Я дважды проверил в AD, что атрибут называется title
, поэтому я должен захватить правильный атрибут, я просто не получаю для него никакого контента.
@marc_s также упоминает, что класс является скелетом, но если именно поэтому я не могу заставить его работать, что еще мне нужно добавить?
Я определил два его класса в их собственном классе .cs
под названием UserPrincipalEx.cs
, и у меня есть классы UserPrincipalExSearchFilter
и UserPrincipalEx
, определенные в этом файле. Однако когда я создаю свой объект в своем коде, он всегда возвращает пустую строку.
UserPrincipalEx user = new UserPrincipalEx(principal.Context);
if (user == null) return false;
return user.Title == "A value other than empty" | (user.Title == "" || user.Title == null);
Что еще мне нужно сделать, чтобы получить значение title
из AD?
Обновление:
Если я слежу за получением атрибута title
, UserPrincipalEx
всегда говорит, что он нулевой, что продолжает заставлять меня чувствовать, что я сделал что-то не так с UserPrincipalEx.cs
.
[DirectoryProperty("title")]
public string Title
{
get
{
if (ExtensionGet("title").Length != 1)
return string.Empty;
return (string)ExtensionGet("title")[0];
}
set { ExtensionSet("title", value); }
}
Он всегда попадает в return string.Empty;
и, как говорится в строках, возвращает пустую строку.
Обновление 2:
Из того, что я могу сказать, не имеет значения, какой расширенный атрибут вы ищете, UserPrincipalEx всегда будет возвращать нуль и делать строку пустой.