从LDAP / AD

时间:2016-12-08 17:31:21

标签: c#

我正在使用下面的代码获取有关已登录用户的各种信息,但是我可以将其转换为可以传递我想要的属性的方法(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应用程序,如果这有任何区别。

由于

1 个答案:

答案 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; }
}