我正在尝试根据以下代码提供的名称来检索Intranet网络应用的AD用户:
var userName = User.Identity.Name.Split('\\')[1];
哪个将返回DOMAIN \\ USER,并将其切成薄片,这样我就只能抓取'USER'。
然后将其传递给此方法:
public bool DoesUserExist(string userName)
{
using (var domainContext = new PrincipalContext(ContextType.Domain, Domain))
{
using (var foundUser = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, userName))
{
return foundUser != null;
}
}
}
在我的开发机器上或在实时发布的机器上运行它,总是返回false。
但是,如果我这样做:
var domainUser = UserPrincipal.Current;
它正确检索用户(在本例中为我本人),并且当我比较SamAccountName和我在方法中通过的名称时,它们是相同的。使用此功能的问题是,当网站实时发布时,它只会获取IIS应用程序池登录名,而User.Identity.Name则会获取该站点上用户的帐户。
我尝试过传递未修饰的名称,但该方法也不起作用。
我的想法不多了;有人知道我在这里错过了什么吗,或者有什么建议可以解决这个问题?
答案 0 :(得分:0)
您的Domain
不正确吗?
您刚刚尝试过
using (var principalContext = new PrincipalContext(ContextType.Domain))
这应该连接到默认域