2009-05-29 24 views
4

Gibt es ein:System.DirectoryServices.AccountManagement in .net 2.0

string name = System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;

Äquivalenz im .net 2.0 Framework? Es verwendet die Referenz System.DirectoryServices.AccountManagement (Version 3.5). Ich habe versucht, diese Datei in einem .net 2.0-Framework zu verwenden, aber ohne Erfolg.

Grundsätzlich möchte ich den vollständigen Benutzernamen (Vorname und Nachname) des Windows-Benutzer abzurufen (nicht Request.ServerVariables [ „REMOTE_USER“], die nur Windows-Benutzernamen gibt)

Antwort

7

Die S.DS.AM Namespace wurde in .NET 3.5 eingeführt, und leider gibt es keine 2.0-Version davon.

Sie können den aktuellen Windows-Benutzer in einer ASP.NET-Anwendung mithilfe von WindowsIdentity.GetCurrent() abfragen. Name - das gibt Ihnen DOMÄNE \ UserName.

Dann müssen Sie eine Benutzersuche in AD für diesen Benutzer mit einem DirectorySearcher-Objekt durchführen, um den entsprechenden DirectoryEntry zu finden. Dies wird Ihnen alle Teile dieses Benutzers geben.

string currentUser = WindowsIdentity.GetCurrent().Name; 

    string[] domainUserName = currentUser.Split('\\'); 
    string justUserName = domainUserName[1]; 

    DirectoryEntry searchRoot = new DirectoryEntry("LDAP://dc=(yourcompany),dc=com"); 

    DirectorySearcher ds = new DirectorySearcher(searchRoot); 

    ds.SearchScope = SearchScope.Subtree; 

    ds.PropertiesToLoad.Add("sn"); 
    ds.PropertiesToLoad.Add("givenName"); 

    ds.Filter = string.Format("(&(objectCategory=person)(samAccountName={0}))", justUserName); 

    SearchResult sr = ds.FindOne(); 

    if (sr != null) 
    { 
     string firstName = sr.Properties["givenName"][0].ToString(); 
     string lastName = sr.Properties["sn"][0].ToString(); 
    } 

Es ist ein bisschen kompliziert und verwickelt in .NET 2.0 - kann das nicht :-(

Marc

+0

ura Genie ändern ... es perfekt vielen Dank arbeitete – waqasahmed

+0

ich verwendet Request.ServerVariables ["REMOTE_USER"] anstelle von WindowsIdentity.GetCurrent(). Name; tho .... aber danke ... hat perfekt funktioniert – waqasahmed

+4

sei vorsichtig und stelle sicher, dass du deine Verzeichniseinträge entsorgst, sie neigen dazu, für immer herumzuhängen und werden dich einmal jammen run out von gleichzeitigen Verbindungen – SillyMonkey