DN 中的 DirectoryEntry.Exists 和 "special" 个字符
DirectoryEntry.Exists and "special" chars in DN
DirectoryEntry groupEntry = new DirectoryEntry("LDAP://CN=Sales,CN=Users,DC=contoso,DC=com");
List<string> list = new List<string>();
foreach(string dn in groupEntry.Properties["members"]) {
try {
if(DirectoryEntry.Exists("LDAP://"+dn)) {
list.Add(dn);
}
} catch(Exception e) {
list.Add(e.Message);
}
}
return list;
返回的列表应该是
CN=Sales Americas,CN=Users,DC=contoso,DC=com
CN=Sales EMEA,CN=Users,DC=contoso,DC=com
CN=Sales D/A/CH,CN=Users,DC=contoso,DC=com
CN=Sales SEA,CN=Users,DC=contoso,DC=com
但它是
CN=Sales Americas,CN=Users,DC=contoso,DC=com
CN=Sales EMEA,CN=Users,DC=contoso,DC=com
Unbekannter Fehler (0x80005000)
CN=Sales SEA,CN=Users,DC=contoso,DC=com
我认为问题出在 /
特殊字符上。我必须如何编码这个字符才能在 DirectoryEntry.Exists
中工作?您是否知道可以作为 CN 名称一部分的其他特殊字符,我必须对其进行编码?
成员属性中的值已经是有效的 DN。
但是把DN放到LDAP路径中还是要转义“/”,DN不需要转义,LDAP路径不需要。
您可以简单地将 DN 中的任何“/”替换为“\/”。
DirectoryEntry groupEntry = new DirectoryEntry("LDAP://CN=Sales,CN=Users,DC=contoso,DC=com");
List<string> list = new List<string>();
foreach(string dn in groupEntry.Properties["members"]) {
try {
if(DirectoryEntry.Exists("LDAP://"+dn)) {
list.Add(dn);
}
} catch(Exception e) {
list.Add(e.Message);
}
}
return list;
返回的列表应该是
CN=Sales Americas,CN=Users,DC=contoso,DC=com
CN=Sales EMEA,CN=Users,DC=contoso,DC=com
CN=Sales D/A/CH,CN=Users,DC=contoso,DC=com
CN=Sales SEA,CN=Users,DC=contoso,DC=com
但它是
CN=Sales Americas,CN=Users,DC=contoso,DC=com
CN=Sales EMEA,CN=Users,DC=contoso,DC=com
Unbekannter Fehler (0x80005000)
CN=Sales SEA,CN=Users,DC=contoso,DC=com
我认为问题出在 /
特殊字符上。我必须如何编码这个字符才能在 DirectoryEntry.Exists
中工作?您是否知道可以作为 CN 名称一部分的其他特殊字符,我必须对其进行编码?
成员属性中的值已经是有效的 DN。
但是把DN放到LDAP路径中还是要转义“/”,DN不需要转义,LDAP路径不需要。
您可以简单地将 DN 中的任何“/”替换为“\/”。