原则上下文在asp.net mvc

时间:2018-06-19 05:44:30

标签: asp.net asp.net-mvc active-directory principalcontext

我正在尝试使用主要上下文连接到活动目录。我试过下面的代码。

using (var context = new PrincipalContext(ContextType.Domain,
                        ConfigurationManager.AppSettings["DomainName"].ToString()))
                    {
                        try
                        {
                            writeLog("Before:" + isCheckUserName);
                            writeLog("Context name:" + context.Name);
                            var user = UserPrincipal.FindByIdentity(context, GetCurrentWindowsLogin());

                            writeLog("GetCurrent:" + GetCurrentWindowsLogin());
                            writeLog("After:" + user.EmployeeId);
                            if (user != null) {
                                StaffName = user.DisplayName;
                                StaffID = user.EmployeeId;

                            }

                        }
                        catch (Exception ex)
                        {
                            writeLog($"Second try: Error - {ex.Message} Inner Exception: {ex.InnerException.Message}");
                        }
                    }

此代码在客户端的本地计算机上运行良好,但在客户端服务器上传后会抛出空引用异常。

任何想法。 感谢。

1 个答案:

答案 0 :(得分:0)

我自己解决了这些问题。 我在PrincipleContextContext构造器下面添加了两个参数。这是Active Directory域用户名和密码。

using (var context = new PrincipalContext(ContextType.Domain,
                    ConfigurationManager.AppSettings["DomainName"].ToString(),
                    ConfigurationManager.AppSettings["ADUserName"].ToString(),
                    ConfigurationManager.AppSettings["ADPassword"].ToString()))
                {
                    try
                    {
                        writeLog("Before:" + isCheckUserName);
                        writeLog("Context name:" + context.Name);
                        var user = UserPrincipal.FindByIdentity(context, GetCurrentWindowsLogin());

                        writeLog("GetCurrent:" + GetCurrentWindowsLogin());
                        writeLog("After:" + user.EmployeeId);
                        if (user != null)
                        {
                            StaffName = user.DisplayName;
                            StaffID = user.EmployeeId;

                        }

                    }
                    catch (Exception ex)
                    {
                        writeLog($"Second try: Error - {ex.Message} Inner Exception: {ex.InnerException.Message}");
                    }
                }

并更改IIS授权。 将匿名身份验证设置为“禁用”,并将ASP.NET模拟设置为“启用”。