如何在C#Web应用程序中找到用户的Active Directory显示名称?

我正在编写一个使用Windows身份validation的Web应用程序,我很乐意使用以下内容获取用户的登录名:

string login = User.Identity.Name.ToString(); 

但我不需要他们的登录名我想要他们的DisplayName。 我现在已经敲了几个小时……

我可以通过Web应用程序访问我组织的AD吗?

这个怎么样:

 private static string GetFullName() { try { DirectoryEntry de = new DirectoryEntry("WinNT://" + Environment.UserDomainName + "/" + Environment.UserName); return de.Properties["fullName"].Value.ToString(); } catch { return null; } } 

请参阅相关问题: Active Directory:检索用户信息

另请参阅: 如何:(几乎)通过C#在Active Directory中的所有内容 ,更具体地说,“ 枚举对象的属性 ”部分。

如果您有连接到域中组的路径,则以下代码段可能会有所帮助:

 GetUserProperty("", "DisplayName"); public static string GetUserProperty(string accountName, string propertyName) { DirectoryEntry entry = new DirectoryEntry(); // "LDAP://CN=, CN =, DC=, DC=,..." entry.Path = "LDAP://..."; entry.AuthenticationType = AuthenticationTypes.Secure; DirectorySearcher search = new DirectorySearcher(entry); search.Filter = "(SAMAccountName=" + accountName + ")"; search.PropertiesToLoad.Add(propertyName); SearchResultCollection results = search.FindAll(); if (results != null && results.Count > 0) { return results[0].Properties[propertyName][0].ToString(); } else { return "Unknown User"; } } 

用这个:

string displayName = UserPrincipal.Current.DisplayName;

如果有人关心我设法破解这个:

  /// This is some imaginary code to show you how to use it Session["USER"] = User.Identity.Name.ToString(); Session["LOGIN"] = RemoveDomainPrefix(User.Identity.Name.ToString()); // not a real function :D string ldappath = "LDAP://your_ldap_path"; // "LDAP://CN=, CN =, DC=, DC=,..." Session["cn"] = GetAttribute(ldappath, (string)Session["LOGIN"], "cn"); Session["displayName"] = GetAttribute(ldappath, (string)Session["LOGIN"], "displayName"); Session["mail"] = GetAttribute(ldappath, (string)Session["LOGIN"], "mail"); Session["givenName"] = GetAttribute(ldappath, (string)Session["LOGIN"], "givenName"); Session["sn"] = GetAttribute(ldappath, (string)Session["LOGIN"], "sn"); /// working code public static string GetAttribute(string ldappath, string sAMAccountName, string attribute) { string OUT = string.Empty; try { DirectoryEntry de = new DirectoryEntry(ldappath); DirectorySearcher ds = new DirectorySearcher(de); ds.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=" + sAMAccountName + "))"; SearchResultCollection results = ds.FindAll(); foreach (SearchResult result in results) { OUT = GetProperty(result, attribute); } } catch (Exception t) { // System.Diagnostics.Debug.WriteLine(t.Message); } return (OUT != null) ? OUT : string.Empty; } public static string GetProperty(SearchResult searchResult, string PropertyName) { if (searchResult.Properties.Contains(PropertyName)) { return searchResult.Properties[PropertyName][0].ToString(); } else { return string.Empty; } } 

如果您有兴趣,可以使用Linq到AD的CodePlex项目。

Paul Kimmel出版的“ LINQ Unleashed for C# ”一书中也有介绍 – 他以上述项目为出发点。

不属于任何一个来源 – 我最近刚读过这本书