我试图找到一种方法来获取默认情况下不在UserPrincipal
对象中的活动目录用户的某些属性。在搜索我的答案时,我遇到了this question。我确定@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);
我还需要做些什么来从AD中获取title
的值?
更新
如果我按照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将始终返回null并使字符串为空。
答案 0 :(得分: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);