可以从LDAP获取全名,但不能获取给定名称或sn



这工作正常:

    Dim ADEntry = New DirectoryEntry(ldapPath + userName, au, ap)
    Dim Name = ADEntry.Properties("FullName").Value.ToString()
    Return Name

但这不会:

    Dim ADEntry = New DirectoryEntry(ldapPath + userName, au, ap)
    Dim firstName = ADEntry.Properties("givenName").Value.ToString()
    Dim lastName = ADEntry.Properties("sn").Value.ToString()
    Return firstName + " " + lastName

我也尝试使用ADEntry.Properties("givenName")(0)。Value.ToString() 当我在某处读到时,它们可能会被索引。 我得到了相同的结果,"对象引用未设置为对象的实例"。

这些确实都是索引属性,您访问它们的方式对我来说看起来不错。

不过,作为一种

好的做法,您应该在尝试读取此属性之前检查以确保确实存在与此属性关联的值 - 您可以使用简单的.Contains检查:

If ADEntry.Properties.Contains("givenName") Then

如果计算结果为 false ,您将知道没有要读取的值,因此您可以避免收到的对象引用错误。

此外,您可能希望考虑使用DirectorySearcher来预加载您感兴趣的属性,而不是直接路径到DirectoryEntry。我是一个C#的人,但是当我开发LDAP组件时,这个页面非常有帮助:

通过DirectorySearchSearchResult检索属性 (C#) http://www.ianatkinson.net/computing/adcsharp.htm

我遇到了同样的问题。

我知道这并不能解决您的问题,但是要获得名字和姓氏,我必须使用以下代码:

System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent();
string[] a = Context.User.Identity.Name.Split('\');

System.DirectoryServices.DirectoryEntry ADEntry = new System.DirectoryServices.DirectoryEntry("WinNT://" + a[0] + "/" + a[1]);
string FullName = ADEntry.Properties["FullName"].Value.ToString();
string FirstName = FullName.Substring(FullName.IndexOf(",") + 2);
string Lastname = FullName.Substring(0, FullName.IndexOf(",")); 

以防万一可能对其他人有所帮助

最新更新