2016-10-05 3 views
0

Я пытался найти способ получить некоторые атрибуты из активного пользователя каталога, которые не находятся в объекте UserPrincipal по умолчанию. При поиске ответа я наткнулся на this question. Я уверен, что ответ, отправленный @marc_s, прав, он по крайней мере очень полезен. Из-за его полезности я создал класс UserPrincipalEx и сделал все, что предложил @marc_s в его ответе. Сам класс, по-видимому, определен правильно, кроме того, что мой расширенный атрибут, в этом случае title всегда возвращает пустую строку. Я дважды проверял в AD, что атрибут называется title, поэтому я должен хватать правильный атрибут. Я просто не получаю для него никакого контента.Extended UserPrincipal Только возврат пустой строки

@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?

Update:

Если я следовать при получении от 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; и, как говорится в строках, возвращает пустую строку

Обновление e 2:

От того, что я могу сказать, не имеет значения, какой расширенный атрибут вы ищете. UserPrincipalEx всегда возвращает null и делает пустую строку.

ответ

0

Вместо использования расширенного 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);