0

这工作正常:

    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() 当我在某处读到它们可能被索引时。我得到了相同的结果,“对象引用未设置为对象的实例”。

4

2 回答 2

2

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

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

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

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

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

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

于 2013-09-06T18:48:09.250 回答
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(",")); 

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

于 2014-08-28T16:55:49.700 回答