可以从LDAP获取FullName但不是givenName或sn

时间:2013-09-06 17:49:02

标签: vb.net ldap

这很好用:

    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(),因为我读到了它们可能被编入索引的地方。我得到了相同的结果,“对象引用没有设置为对象的实例”。

2 个答案:

答案 0 :(得分:2)

这些确实都是索引属性,而你访问它们的方式对我来说很好。

尽管如此,在尝试阅读之前,您应该检查以确保实际存在与此属性相关联的值 - 您可以使用简单的.Contains检查:

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

如果评估结果为false,您就会知道没有值可读,因此您可以避免收到的对象引用错误。

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

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

答案 1 :(得分:0)

我遇到了同样的问题。

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

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(",")); 

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