我正在使用下面的代码获取有关已登录用户的各种信息,但是我可以将其转换为可以传递我想要的属性的方法(DisplayName
,{{1然后它会为登录的人返回该值。我无法弄清楚如何让它工作。
EmailAddress
虽然上述方法有效,但我不能使用方法范围之外的任何变量,这是没有用的。
我尝试了下面的方法来获取using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, User.Identity.Name))
{
if (user != null)
{
loggedInUserfullName = user.DisplayName;
loggedInUserEmail = user.EmailAddress;
}
}
}
,但由于DisplayName
期待字符串而导致错误(我没有带有用户名的字符串 - 这就是我想要的找出来!)
FindByIdentity
有办法做到这一点吗?我使用错误的库来实现我想要的吗?
这是一个使用Windows身份验证的Web应用程序,如果这有任何区别。
由于
答案 0 :(得分:2)
我很久没有使用过DirectoryServices.AccountManagement的东西了,但是我还是试了一下。
代码中的这一行抛出异常:
UserPrincipal loggedInUser = new UserPrincipal(ContextType.Domain);
异常告诉您UserPrincipal的构造函数需要System.DirectoryServices.AccountManagement.PrincipalContext,但您要为其提供System.DirectoryServices.AccountManagement.ContextType。工作代码中的这些行是正确的:
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
{
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, User.Identity.Name))
{
我不确定我是否完全明白您的意图,但如果您正在寻找可重复使用的方式来获取有关登录用户的信息,请尝试以下操作:
public static class UserManager
{
public static string GetDisplayName(string name)
{
using (UserPrincipal user = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), name))
{
if (user != null)
{
return user.DisplayName;
}
throw new Exception("error");
}
}
}
您可以通过以下方式调用它:
var dn = UserManager.GetDisplayName(User.Identity.Name);
显然,您希望更好地处理错误。如果我遗漏了某些内容,请告诉我,我会尝试更新我的回答。
希望这有帮助!
修改强>
要返回包含多个字段的对象,您可以执行以下操作:
public static UserInfo GetDisplayName(string name)
{
using (UserPrincipal user = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), name))
{
if (user != null)
{
return new UserInfo
{
FullName = user.DisplayName,
Email = user.EmailAddress,
GivenName = user.GivenName,
SamAccountName = user.SamAccountName,
Surname = user.Surname
//any other things you may need somewhere else
};
}
throw new Exception("error");
}
}
这是UserInfo类:
public class UserInfo
{
public string FullName { get; set; }
public string Email { get; set; }
public string Surname { get; set; }
public string GivenName { get; set; }
public string SamAccountName { get; set; }
}