限制在LDAP查询中返回的属性

本文关键字:返回 属性 查询 LDAP | 更新日期: 2023-09-27 18:10:20

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

我一直在使用DirectorySearcher并添加我想要的DirectorySearcher. propertiestoload的属性。问题是,这只是确保添加的属性包含在DirectoryEntry中。属性以及一些默认列表。是否有任何方法可以指定您想要返回的唯一属性?

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())
...

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

限制在LDAP查询中返回的属性

你限制的是在你的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上访问这些,而无需返回底层DirectoryEntry

原来的答案是正确的,但是如果你真的需要使用DirectoryEntry并且想要访问一个特定的属性,请确保在访问值之前通过RefreshCache加载它:

dirEntry.RefreshCache(new [] { "mail", "displayName" });
var email = (string) dirEntry.Properties["mail"]?.Value;
var displayName = (string) dirEntry.Properties["displayName"]?.Value;

只有"邮件"answers";displayName"

更多信息在这里