【发布时间】:2018-04-11 23:40:07
【问题描述】:
我正在尝试查询 Active Directory 并返回一个 IEnumerable,但它具有 Title 和 EmailAddress 等属性,但在 PrincipalSearcher.Findll() 中没有显示这些属性。如果我使用 PrincipalSearcher.FindOne(),它有更多的属性(但仍然不是 Title),所以我试图弄清楚我在做什么不同或如何获取我需要的信息。我已经厌倦了谷歌试图找到更多信息,似乎 UserPrincipal.GetUnderlyingObject() 可能是票,但我不明白如何将其纳入 foreach 循环以便将其填充到列表中。
public class ADUser
{
public string SamAccountName { get; set; }
public string DisplayName { get; set; }
public string Title { get; set; }
public IEnumerable<ADUser> Get(string username)
{
var users = new List<ADUser>();
var principalContext = new PrincipalContext(ContextType.Domain, "domain.com");
var userPrincipal = new UserPrincipal(principalContext)
{
SamAccountName = username
};
var principalSearcher = new PrincipalSearcher(userPrincipal);
foreach (var user in principalSearcher.FindAll())
{
users.Add(new ADUser
{
SamAccountName = user.SamAccountName,
DisplayName = user.DisplayName,
//Title = user.Title //Won't work, no Title property
});
}
return users;
}
}
这可行,但只返回 .FindOne() 的一小部分属性,但如果我执行 FindOne(),我将无法搜索部分用户名,例如“jsm”返回“John Smith”和“詹姆斯·斯莫斯”。
【问题讨论】:
-
这些让我朝着正确的方向前进,但我仍然无法在 foreach 循环中获取 Title 属性。我可以通过执行“userPrincipal.Title”在外面看到它,但如果我不能将它放入 List
以供以后迭代,那对我没有帮助。
标签: c# asp.net-mvc active-directory