限制LDAP查询中返回的属性

时间:2011-10-02 20:23:29

标签: c# .net active-directory ldap directoryservices

如何通过System.DirectoryServices限制LDAP查询中返回的属性?

我一直在使用DirectorySearcher并将我想要的属性添加到DirectorySearcher.PropertiesToLoad。问题是,这只是确保添加的属性包含在DirectoryEntry.Properties以及一些默认列表中。有没有办法指定您想要返回的唯一属性?

DirectoryEntry base = new DiectoryEntry(rootPath, null, null, AuthenticationTypes.FastBind);
DirectorySearcher groupSearcher = new DirectorySearcher(base);
groupSearcher.Filter = "(objectClass=group)";
groupSearcher.PropertiesToLoad.Add("distinguishedName");
groupSearcher.PropertiesToLoad.Add("description");
foreach (SearchResult groupSr in groupDs.FindAll())
...

当我获得组DirectoryEntry时,在foreach循环内部有大约16种不同的属性,我可以访问的不仅仅是我指定的两个属性(distinguishedName,description)

1 个答案:

答案 0 :(得分:2)

您要限制的是SearchResult个对象中可用/填充的属性 - 您可以直接在foreach循环中访问这些属性:

DirectoryEntry baseEntry = new DirectoryEntry(rootPath, null, null, AuthenticationTypes.FastBind);

DirectorySearcher groupSearcher = new DirectorySearcher(baseEntry);
groupSearcher.Filter = "(objectClass=group)";

groupSearcher.PropertiesToLoad.Add("distinguishedName");
groupSearcher.PropertiesToLoad.Add("description");

foreach (SearchResult groupSr in groupSearcher.FindAll())
{
   if(groupSr.Properties["description"] != null && groupSr.Properties["description"].Count > 0)
   {
      string description = groupSr.Properties["description"][0].ToString();
   }

  .....
} 

您无法限制实际DirectoryEntry的属性 - 因此,如果您获取每个SearchResult的目录条目 - 您可以完全访问所有内容。但重点是,您可以定义所需的属性,并在SearchResult直接访问 必须返回基础{{ 1}}