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読み取る値がないことがわかるため、受け取っているオブジェクト参照エラーを回避できます。

また、 にDirectorySearcher直接パスするのではなく、 を使用して関心のあるプロパティをプリロードすることを検討することもできます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 に答える