Запрос Active Directory из ASP.NET и привязка результата к представлению списка - PullRequest
2 голосов
/ 25 октября 2010

Мне удалось выполнить проверку подлинности ASP.NET с помощью AD.Теперь я хочу запросить OU в AD и отобразить результат либо ListView, либо GridView на странице ASP.NET.

Вот контроллер домена: dc.itlab.edu

OU: UsersStudents

В организационной единице (OU) UsersStudents имеются следующие столбцы:

Имя, Фамилия, Имя для входа в систему до Windows 2000, Имя, Тип

Я хочу запросить столбец Имя, Фамилия, Имя входа до Windows 2000 в OU UsersStudents и связать результат с ListView или GridView.

Спасибо за предложение в C # или VB.NET.

Ответы [ 3 ]

4 голосов
/ 25 октября 2010

Если вы используете .NET 3.5 или можете обновиться до него - материал LDAP был значительно улучшен с введением пространства имен System.DirectoryServices.AccountManagement.

Он содержит среди прочего классы, такие как UserPrincipal, которые предлагают большинство наиболее часто используемых атрибутов LDAP в качестве свойств. Используя PrincipalSearcher и QBE (Query-by-example), вы можете очень легко найти тех пользователей (или других объектов), которые вас интересуют, и связать их с сеточным представлением ASP.NET.

Чтобы узнать больше о новом материале .NET 3.5, прочитайте эту прекрасную статью в журнале MSDN:

Управление принципами безопасности каталогов в .NET Framework 3.5 - выпуск за январь 2008 г.

Обновление: Используя интерфейс .NET 3.5, вы можете написать код примерно так:

// define the content - domain name (second param) must be NetBIOS-style,
// third parameter is the container where to create the context for
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "ITLAB", "OU=UsersStudents,DC=dc,DC=itlab,DC=edu");

// define your "prototype" for the searcher - here: you want to search for 
// users which have the .Enabled property set to true; you could define additional
// requirements here
UserPrincipal qbePrototype = new UserPrincipal(ctx);
qbePrototype.Enabled = true;

// create PrincipalSearcher based on that QBE prototype
PrincipalSearcher ps = new PrincipalSearcher(qbePrototype);

// find all matching Principals - in your case, those will be of type UserPrincipal
PrincipalSearchResult<Principal> results = ps.FindAll();

Теперь у вас должна быть возможность привязать results непосредственно к DataGridView или чему-либо и выбрать те свойства для ваших столбцов, которые вы ищете:

  • Имя = UserPrincipal.GivenName
  • Фамилия = UserPrincipal.Sameame
  • Имя входа до Windows 2000 = UserPrincipal.SamAccountName
  • Имя = Имя
  • Type = ?? Что вы здесь имеете в виду ??
0 голосов
/ 25 октября 2010

Не проверено ** Это укажет вам правильное направление. Должно быть очень близко к тому, что вам нужно.

    Dim MySearchRoot As DirectoryEntry = New DirectoryEntry("LDAP://domain/DC=..", "usr", "pwd")
    Dim MyDirectorySearcher As New DirectorySearcher(MySearchRoot)

    MyDirectorySearcher.Filter = ("(&(objectCategory=organizationalunit)(name=UsersStudents))")

    MyDirectorySearcher.SearchScope = SearchScope.Subtree
    MyDirectorySearcher.PropertiesToLoad.Add("First Name")
    MyDirectorySearcher.PropertiesToLoad.Add("Last Name")
    MyDirectorySearcher.PropertiesToLoad.Add("Pre-Windows 2000 Logon Name")
    MyDirectorySearcher.PropertiesToLoad.Add("Name")
    MyDirectorySearcher.PropertiesToLoad.Add("Type")
    MyDirectorySearcher.Sort.Direction = System.DirectoryServices.SortDirection.Ascending
    MyDirectorySearcher.Sort.PropertyName = "Name"

    Dim MySearchResult As SearchResultCollection = MyDirectorySearcher.FindAll()

    Dim myTable As New DataTable("Results")
    Dim colName As String

    For Each colName In MyDirectorySearcher.PropertiesToLoad
        myTable.Columns.Add(colName, GetType(System.String))
    Next

    Dim result As SearchResult

    For Each result In MySearchResult
        Dim dr As DataRow = myTable.NewRow()
        For Each colName In MyDirectorySearcher.PropertiesToLoad
            If result.Properties.Contains(colName) Then
                    dr(colName) = CStr(result.Properties(colName)(0))
                End If
            Else
                dr(colName) = ""
            End If
        Next
        myTable.Rows.Add(dr)
    Next

    gridview.datasource = myTable
    gridview.databind()
0 голосов
/ 25 октября 2010

Здесь приведен пример C # для заполнения ASP.Net GridView из AD .

...