Как пройти каталог с отличительными именами - PullRequest
1 голос
/ 07 апреля 2011

Если у меня есть путь к каталогу (а также соответствующие учетные данные), например:

LDAP://directory:389/DC=domain,DC=com

Какие классы / методы я могу использовать для доступа к различным объектам по их свойствам различаемого имени (DN)? Я пробовал класс DirectoryEntry, но не нашел способа извлечь объект DirectoryEntry из "базового" объекта и DN.

Пример: с указанным выше URL-адресом каталога и DN CN=User,OU=Development,DC=domain,DC=com, как я могу получить доступ к DirectoryEntry (или аналогичному) объекту для LDAP://directory:389/CN=User,OU=Development,DC=domain,DC=com?

Я видел некоторые решения, включающие в себя манипуляции со строками URL, но я ищу способ сделать это с помощью обычных объектов / классов .NET.

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

Все объясняется здесь .

Вот пример:

DirectoryEntry userEntry = new DirectoryEntry("LDAP://directory:389/CN=User,OU=Development,DC=domain,DC=com",
                                              "<adminAccountName>",
                                              "<adminPassword");

С хорошим учебником здесь .

0 голосов
/ 08 апреля 2011

Вот мой не совсем идеальный метод, который я сейчас использую:

string GetNewDN(DirectoryEntry deBase, string DN)
{
    try
    {   // Handle the LDAP://example.com:389/DN=string formats
        return (new Uri(deBase.Path)).GetLeftPart(UriPartial.Authority) + "/" + DN.Replace("/", @"\/");
    }
    catch (UriFormatException)
    {   // Handle the LDAP://DN=string formats
        return deBase.Path.Substring(0, deBase.Path.IndexOf(":")) + "://" + DN.Replace("/", @"\/");
    }
}
0 голосов
/ 07 апреля 2011

Не могли бы вы использовать DirectorySearcher для поиска поддерева от корня DirectoryEntry?

Это не поможет, как вы заметили в своем комментарии. Я не думаю, что есть какая-то замена для синтаксического анализа DirectoryEntry.Path, извлечения необходимых вам битов и объединения вашего DN, экранирования любых специальных символов в DN при необходимости.

Вам нужно все, вплоть до третьей косой черты:

LDAP://server:port/relativePath

или второй слеш при использовании привязки без сервера:

LDAP://relativePath

но может быть неоднозначность, если в самом относительном пути есть косая черта (которая будет экранирована обратной косой чертой). Итак, как вы говорите, строковые манипуляции.

...