DirectoryEntry.Exists和DN中的“特殊”字符

时间:2015-01-14 15:57:37

标签: c# active-directory

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名称的一部分,我必须编码吗?

1 个答案:

答案 0 :(得分:1)

成员属性中的值已经是有效的DN 但是当将DN放入LDAP路径时,您仍然必须转义“/”,它不需要在DN中转义但不需要在LDAP路径中转义。

您可以在DN中简单地用“\ /”替换任何“/”。