在asp.net中获取当前用户的全名

时间:2015-01-30 01:37:21

标签: c# asp.net iis-6

我有下面的代码,它完美无缺,但是当我在IIS中部署它时,它不起作用。

DirectoryEntry de = new DirectoryEntry("WinNT://" + Environment.UserDomainName + "/" + Environment.UserName);
return de.Properties["fullName"].Value.ToString();

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

Environment包含有关服务器上环境的信息,因此您只需获取运行Web应用程序的进程的用户名。那不是你想要的。

相反,您应该使用User.Identity.Name来检索用户的用户名,然后您可以使用它来从AD获取用户的名称。

答案 1 :(得分:1)

根据.Net 4.5建议,您应始终使用ClaimsPrincipal。我正在给你一个以下程序示例,我刚刚通过控制台应用程序运行它并且它运行良好。

我在这里使用了一个扩展方法,并附加到claimprincipal,然后现在可以访问任何地方。

private static void Main(string[] args)
        {

            var fullName = ClaimsPrincipal.Current.GetFullName();
        }

        public static string GetFullName(this ClaimsPrincipal principal)
        {

            if (!principal.HasClaim(claim => claim.Type == ClaimTypes.Surname) ||
                !principal.HasClaim(claim => claim.Type == ClaimTypes.GivenName))
            {
                var dcUsername = principal.Identity;
                // get the value from dc.
                var de = new DirectoryEntry("WinNT://" + dcUsername);

                var claims = new List<Claim> {new Claim(ClaimTypes.GivenName, ""), new Claim(ClaimTypes.Surname, "")};
                var id = principal.Identities.First();
                id.AddClaims(claims);
            }

            var givenName = principal.FindFirst(ClaimTypes.GivenName).Value;
            var surname = principal.FindFirst(ClaimTypes.Surname).Value;

            return string.Format("{0} {1}", givenName, surname);
        }

答案 2 :(得分:0)

Environment.UserName通常在IIS上托管时返回ApplicationPool用户。尝试使用HttpContext.User.Identity.Name获取域名用户名。

例如,

string userName = HttpContext.User.Identity.Name;
DirectoryEntry de = new DirectoryEntry("WinNT://" + userName);
return de.Properties["fullName"].Value.ToString();

答案 3 :(得分:0)

如果在域上下文中使用Windows身份验证,则此解决方案在调试器中以及部署到IIS以获取当前用户的名字/姓氏时均应适用。首先添加对System.DirectoryServices.AccountManagement的引用。

string currentUserID = HttpContext.Current.User.Identity.Name;

using (PrincipalContext adContext = new PrincipalContext(ContextType.Domain))
{
    UserPrincipal currentUser = UserPrincipal.FindByIdentity(adContext, currentUserID);
    return string.Format("{0} {1}", currentUser.GivenName, currentUser.Surname);
}