转义为LDAP查询的字符串中的非特殊字符

我希望我能恰当地提出这个问题。 这里有一个混合主题。

我在C#中创建了一个创建Active Directory用户的函数。 使用需要如下所示的LDAP字符串:

 userinfo.displayName = "Surname, Firstname" CN=" + userinfo.displayName, "user" 

由于逗号位于字符串中,因此传回以下exception消息。

指定了无效的dn语法。

应用字符串后的完整dn如下所示

 "CN=Surname**,** Lastname,OU=Users,DC="Foo",DC="net" 

通用名CN =中的逗号是问题…

有没有一种方法C#可以忽略字符串中的逗号? 有效地逃避它。

使用前导斜杠(’\’)来转义可分辨名称中的无效字符。 例如,上面的专有名称应为:

 "CN=Surname\, Lastname,OU=Users,DC=Foo,DC=net" 

根据RFC 4514第2.4节:轻量级目录访问协议(LDAP):可分辨名称的字符串表示 ,字符 "#+ <=>\可以通过前导斜杠进行转义。其他非字母数字字符应以\XX的forms显示,其中XX是UTF8的hex数字字符编码。有关示例,请参阅第4节。

请注意, X500DistinguishedName类(在System.Security Cryptography中)似乎没有Parse或Escape方法来帮助解决这种情况。

某些字符必须使用反斜杠( \ )进行转义, 后跟两个hex数字 ,而不是根据RFC4514的单个反斜杠。 许多目录目录服务器都支持\,但由于它没有标准化,因此LDAP客户端不能使用这种表示法 – 它可以在某些服务器上运行,但不能在其他服务器上运行,客户端不能假设它们正在与特定服务器的软件通信。