限制在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)
你限制的是在你的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"
更多信息在这里