在开发服务器上使用c# .net的用户获取活动目录域名时出错(在本地工作正常)

本文关键字:出错 域名 工作 活动 服务器 开发 获取 用户 net | 更新日期: 2023-09-27 18:15:04

我有一个方法,它返回用户列表并尝试基于domainid获取全名。所以我想填充这个列表到下拉列表

下面的代码在本地中工作良好,并且在DevBox上抛出异常,"object reference not set…"在下一行。

UserPrincipal。FindByIdentity(new PrincipalContext(ContextType.Domain), stringArray[x]).Name;

谁有解决办法?

public static List<SelectListItem> GetUsers()
    {
        try 
        { 
            //Get Users list 
            string usersList = “nraja01,sdaniel01,mmontgo01”;
            char[] charArray = new char[] { ',' };
            string[] stringArray = usersList.Split(charArray);
            List<SelectListItem> users = new List<SelectListItem>();
            var user = new SelectListItem(); 
            //loop through each user
            for (int x = 0; x <= stringArray.GetUpperBound(0); x++)
            {
                user = new SelectListItem();
                user.Value = stringArray[x];
                user.Text = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), stringArray[x]).Name;
                users.Add(user);
            }
            return users;
        }
        catch (Exception ex)
        {
            _log.Error("Error occured in GetUsers() method: ", ex);
            return null;
        }
    }

在开发服务器上使用c# .net的用户获取活动目录域名时出错(在本地工作正常)

由于。net 4.0中的一个bug,当你使用ContextType.Domain时,你必须为PrincipalContext使用不同的构造函数。使用这个构造函数:

PrincipalContext(ContextType, string)
例如:

PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, Environment.UserDomainName)

有关该bug的详细信息,请参见以下链接:

http://social.msdn.microsoft.com/forums/en/csharplanguage/thread/4c9fea6c - 1 - d0a - 4733 - a8ac e3b78d10e999

http://connect.microsoft.com/VisualStudio/feedback/details/610995/unknown-principaloperationexception-when-add-userprincipal-in-collection-groupprincipal-members

我已经设法通过使用这个来检索用户的全名。

System.DirectoryServices.AccountManagement.UserPrincipal.Current.GivenName