我目前正在使用一种方法从 AD 获取当前登录用户的 GivenName 和 Surname。访问此站点的所有用户都将是 AD 中的内部用户。
对于某些用户来说这是有效的,而对于其他用户来说,在尝试 FindByIdentity 时似乎 UserPrincipal 正在返回 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";
}
}
}
我不明白...任何帮助将不胜感激!谢谢!!