2009-05-29 8 views
4

Y at-il un:System.DirectoryServices.AccountManagement dans .net 2.0

string name =

System.DirectoryServices.AccountManagement.UserPrincipal.Current.DisplayName;

l'équivalence dans le framework .net 2.0? Il utilise la référence System.DirectoryServices.AccountManagement (ver 3.5). J'ai essayé d'utiliser ce fichier sur un framework .net 2.0 mais en vain.

Fondamentalement, je veux récupérer le nom d'utilisateur complet (prénom et nom) de l'utilisateur Windows (pas Request.ServerVariables [ « REMOTE_USER »] qui ne donne que nom_utilisateur_windows)

Répondre

7

Le S.DS.AM namespace a été introduit dans .NET 3.5, et malheureusement, il n'y a pas de version 2.0.

Vous pouvez interroger l'utilisateur Windows actuel dans une application ASP.NET à l'aide de WindowsIdentity.GetCurrent(). Name - cela vous donne DOMAIN \ UserName.

Ensuite, vous devrez faire une recherche d'utilisateur dans AD pour cet utilisateur avec un objet DirectorySearcher afin de trouver le DirectoryEntry correspondant. Cela vous donnera tous les morceaux de cet utilisateur.

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(); 
    } 

Il est un peu compliqué et impliqué dans .NET 2.0 - ne peut pas changer cette :-(

Marc

+0

génie ura ... cela a fonctionné parfaitement un grand merci – waqasahmed

+0

je Request.ServerVariables ["REMOTE_USER"] au lieu de WindowsIdentity.GetCurrent(). Nom, mais .... mais merci ... a fonctionné parfaitement – waqasahmed

+4

soyez prudent et assurez-vous que vous disposez de vos entrées de répertoire.Ils ont tendance à traîner pour toujours et se tasser une fois que vous – SillyMonkey

Questions connexes