在Dev Server上使用C#.net的用户获取Active Directory域名时出错(在本地工作正常)?

时间:2011-11-18 22:39:49

标签: c# asp.net asp.net-mvc c#-4.0

我有一个方法可以返回用户的列表,并尝试根据domainid获取完整名称。所以我想把这个列表填充到Dropdown。

以下代码在本地中正常工作,并且在 DevBox 上抛出异常,即“对象引用未设置...”在下面一行。

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

2 个答案:

答案 0 :(得分:1)

由于.NET 4.0中存在错误,因此在使用 ContextType.Domain 时,必须为PrincipalContext使用不同的构造函数。使用此构造函数:

PrincipalContext(ContextType, string)

例如:

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

有关错误的详细信息,请参阅以下链接:

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

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

答案 1 :(得分:0)

我已成功使用此功能检索用户的全名。

System.DirectoryServices.AccountManagement.UserPrincipal.Current.GivenName