Active Directory LDAP搜索过滤器或操作符语法
本文关键字:操作符 语法 过滤器 搜索 Directory LDAP Active | 更新日期: 2023-09-27 17:54:15
我在c#中使用LDAP目录服务,通过一些过滤条件从LDAP中搜索用户。我想提供多个OR过滤条件。例如firstName, lastName, telephone等。当我提供所有过滤器值时,它工作得很好,但当我只提供一个或两个过滤器值时,它会给出错误。
下面是我使用的示例代码:
var LdapSearcher = new DirectorySearcher(RootDomain,
"(&(objectclass=user)(sn=" + lastName.Trim() + ")(givenName=" + firstName.Trim() + "))");
当我同时提供sn和givenName值时,我得到结果。然而,这是一个OR搜索,用户将输入lastName或FirstName。
如何在LDAP DirectorySearcher中应用OR Filter ?
您需要使用|
操作符。根据您提供的信息,您的条件是:
-
objectclass
必须等于"user" -
sn
或givenName
必须等于提供的值
假设用户提供了"John Smith"这个名字。你的过滤器应该看起来像:
(&(objectClass=user)(|(sn=Smith)(givenName=John)))
var LdapSearcher = new DirectorySearcher(RootDomain,
"(&(objectclass=user)" +
(!(string.IsNullOrEmpty(lastName.Trim())) ? "(sn=" + lastName.Trim() + ")" : "") +
(!(string.IsNullOrEmpty(firstName.Trim())) ? "(givenName=" + firstName.Trim() + ")" : "")
+ ")");