Я пытаюсь запросить ActiveDirectory через LDAP, но запрос может содержать пробелы и другие символы, которые могут вызвать проблемы (дефис?)Запрос Active Directory с LDAP фильтр, содержащих пробелы
(&(objectCategory=person)(objectClass=user)(|(&(sn=Bloggs*)(givenName=Jo*))(displayName=Jo Bloggs))
Это OR поиск, например, в SQL было бы WHERE (sn LIKE 'Bloggs%' AND givenName LIKE 'Jo%') OR displayName = 'Jo Bloggs'
Однако, когда я пытаюсь запрос LDAP, я получаю сообщение об ошибке: System.ArgumentException: The (&(objectCategory=person)(objectClass=user)(|(&(sn=Bloggs*)(givenName=Jo*))(displayName=Jo Bloggs)) search filter is invalid
код для выполнения поиска:
string userName = "Jo Bloggs";
DirectoryEntry adroot = new DirectoryEntry("LDAP://" + Environment.UserDomainName, "user", "password", AuthenticationTypes.Secure);
DirectorySearcher search = new DirectorySearcher(adroot);
search.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(|(&(sn={0}*)(givenName={1}*))(displayName={2}))", userName.Split(' ')[1], userName.Split(' ')[0], userName);
Это только основной поиск, я бы например, поиск других столбцов (название должности, телефон, отдел и т. д.), например WHERE title LIKE '%foo%' OR telephonenumber LIKE '%foo% OR department LIKE '%foo%'
Кроме того, можно ли кэшировать поиск, поэтому ActiveDirectory не получает много обращений от людей, ищущих t для одной и той же вещи?
Это также находит только одну запись, я бы хотел найти и отобразить в репитере все найденные результаты.
Принят больше ответов на мои предыдущие вопросы. Однако есть несколько вопросов, которые не ответили на вопрос (либо ответа нет (например, не может быть сделано, ограничения системы), либо ответы не полностью отвечают на вопрос) – SamWM