1

我对 AD 知之甚少,但这就是我正在尝试做的事情以及我听到的我应该去的方向。

我们在 Active Directory 中的用户在邮件字段中包含电子邮件地址。我想允许他们使用他们的电子邮件地址或他们的正常登录名登录到我们的网站。我的 VB 代码将检查他们是否输入了未格式化为电子邮件的文本并将其直接登录,或者是否将其格式化为电子邮件地址,我想使用该地址在后台查找登录信息。

我听说 DirectorySearcher 是要走的路,但我没有任何运气来实现它。我将不胜感激任何帮助。

Dim theUser As String = String.Empty
Dim strDomain As String = "DEV"
Dim directoryEntryMTA As String = "LDAP://dc=dev,dc=ad,dc=mtaaccount"

            If Not String.IsNullOrEmpty(txtUsername.Text) Then
                If txtUsername.Text.IndexOf("@") > -1 Then
                    Dim entry As New DirectoryEntry(directoryEntryMTA)
                    Dim search As New DirectorySearcher(entry)
                    search.Filter = "mail=" & txtUsername.Text
                    search.PropertiesToLoad.Add("SAMAccountName")
                    Dim result As SearchResult = search.FindOne()

                    If result IsNot Nothing Then
                        theUser = strDomain + "\" + result.ToString()
                    Else
                        ' ADD CODE IF DIRECTORY SEARCHER DOES NOT FIND ANY USER WITH SUPPLIED EMAIL
                    End If
                Else
                    theUser = strDomain + "\" + txtUsername.Text
                End If
            End If
4

1 回答 1

0

不确定你是否曾经解决过这个问题,但试试这个:

If result IsNot Nothing Then
    '*** INSTEAD OF THIS ***
    'theUser = strDomain + "\" + result.ToString()

    '*** USE THIS ***
    theUser = strDomain + "\" + result.Properties("samaccountname").Item(0).ToString
Else
    ...

调用对象ToString上的方法result将尝试将SearchResult对象转换为字符串,而不是SAMAccountName您刚刚在search对象中指定的属性。您需要实际识别您在search对象中定义的特定属性/属性和对象,并将它们的各个值转换为字符串(或整数,或日期时间等)

于 2013-07-11T22:13:25.927 回答