【发布时间】:2012-10-02 14:54:38
【问题描述】:
我在从 Active Directory 获取 UserPrincipal 时遇到问题。首先,我在本地环境中使用过(不是使用 IIS,而是使用 ASP.NET 开发服务器):
User usr = new User();
usr.SoeId = Request.ServerVariables["LOGON_USER"];
usr.IP = Request.ServerVariables["REMOTE_ADDR"];
usr.FirstName = UserPrincipal.Current.GivenName;
usr.LastName = UserPrincipal.Current.Surname;
而且效果很好。我得到了我想要的。但是,当我在测试环境中安装应用程序时,出现错误“对象引用未设置为对象的实例”。我已经尝试过here 的解决方案。
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain))
{
UserPrincipal up = UserPrincipal.FindByIdentity(pc, usr.SoeId);
return up.DisplayName;
// or return up.GivenName + " " + up.Surname;
}
但它不起作用。
我使用 Windows 身份验证。模拟设置为真。请帮我。
【问题讨论】:
-
请显示更多代码,而不仅仅是 UserPrincipal.Current.GivenName 我们需要查看您如何实例化 Object 变量
-
在 IIS 中是否关闭了 "Allow anonymous"?
-
是的,匿名身份验证已禁用。如果有任何意义,我会使用 IIS 7.0 和 Windows Server 2008。
-
是的,我遇到过这样的问题。只需仔细检查 IIS 上的安全权限是什么,以及运行您的应用程序的用户是谁:如果此用户在 AD 中没有足够的权限,您的代码将会像您所拥有的那样失败。
-
我什至尝试以管理员身份登录,但仍然无法正常工作。 Request.ServerVariables["LOGON_USER"] 的用户名是 "DOMAIN\Administrator"
标签: c# asp.net active-directory userprincipal