C#System.DirectoryServices.AccountManagement - UserPrincipal.FindByIdentity为某些用户返回NULL

时间:2013-01-24 15:36:45

标签: c# asp.net asp.net-mvc active-directory

我目前正在使用一种方法从AD获取当前登录用户的GivenName和Surname。访问此站点的所有用户都是AD中的内部用户。

对于某些用户来说这是有效的,而对于其他用户来说,似乎UserPrincipal在尝试FindByIdentity时返回NULL。这是OU的事吗?我没有指定要查看的OU,我只是希望它通过登录名查找当前登录的用户,并且无论他们在AD结构中的哪个位置都拉出他们的名字/姓氏......

下面是我的方法的代码...它包含一个包含当前用户的“User.Identity.Name”的参数...

public static string GetFullName(string userIdentityName)
{            
    using (var context = new PrincipalContext(ContextType.Domain))
    {
        using (UserPrincipal principal = UserPrincipal.FindByIdentity(context, userIdentityName))
        {
            return principal != null ? principal.GivenName + " " + principal.Surname : "User Not Found";
        }
    }
}

我还在页面上输出User.Identity.Name,这对每个人都有用,所以我知道传入方法的参数已经填充。

奇怪的是我可以对用户身份名称进行硬编码(通常返回null),即使完全相同的事情通过参数传递,代码也能正常工作。类似的东西:

public static string GetFullName(string userIdentityName)
{
    var username = "DOMAIN\\username";

    using (var context = new PrincipalContext(ContextType.Domain))
    {
        using (UserPrincipal principal = UserPrincipal.FindByIdentity(context, username))
        {
            return principal != null ? principal.GivenName + " " + principal.Surname : "User Not Found";
        }
    }
}

我不明白......任何帮助都会非常感激!谢谢!!

0 个答案:

没有答案