我希望我能恰当地提出这个问题。这里有一个混合主题。
我在C#
创建了一个创建Active Directory用户的功能。使用需要如下所示的LDAP字符串:
userinfo.displayName = "Surname, Firstname"
CN=" + userinfo.displayName, "user"
由于逗号位于字符串中,因此传回以下异常消息。
指定了无效的dn语法。
应用字符串后的完整dn如下
"CN=Surname**,** Lastname,OU=Users,DC="Foo",DC="net"
通用名CN =中的逗号是问题......
有没有一种方法C#可以忽略字符串中的逗号?有效地逃避它。
答案 0 :(得分:9)
使用前导斜杠('\')转义可分辨名称中的无效字符。例如,上面的专有名称应为:
"CN=Surname\, Lastname,OU=Users,DC=Foo,DC=net"
根据RFC 4514: Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names第2.4节,字符,
"
,#
,+
,,
,{{1} },;
,<
,=
和>
可以通过前导斜杠进行转义。其他非字母数字字符应以\
的形式显示,其中XX是UTF8字符编码的十六进制数字。有关示例,请参阅第4节。
请注意X500DistinguishedName类(在System.Security Cryptography中)似乎没有Parse或Escape方法来帮助解决这种情况。
答案 1 :(得分:5)
某些字符必须使用反斜杠(\
)后跟两个十六进制数字进行转义,而不是根据RFC4514进行单反斜杠转义。许多目录目录服务器支持\,
,但由于它没有标准化,LDAP客户端不能使用这种表示法 - 它可以在某些服务器上运行但在其他服务器上不起作用,客户端不能假设它们正在与特定服务器的软件通信