Расширенный UserPrincipal возвращает только пустую строку

Я пытался найти способ получить некоторые атрибуты от пользователя 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 всегда будет возвращать нуль и делать строку пустой.


person BlueBarren    schedule 05.10.2016    source источник


Ответы (1)


Вместо использования расширенного UserPrincipal я просто использовал DictionaryEntry, чтобы найти значение и вместо этого сравнить его.

UserPrincipal user = new UserPrincipal(principal.Context);
if (user == null) return false;
DirectoryEntry directoryEntry = principal.GetUnderlyingObject() as DirectoryEntry;
string title = "";
if (directoryEntry.Properties.Contains("title"))
{
    title = directoryEntry.Properties["title"].Value.ToString();
}
return title == "Comparison Value" | (title == "" || title == null);
person BlueBarren    schedule 30.11.2016