【发布时间】:2018-10-18 09:02:26
【问题描述】:
我正在尝试根据此代码提供的名称为 Intranet Web 应用检索 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 获取网站上用户的帐户。
我尝试过传递未修剪的名称,但也没有用。
我的想法不多了;有人知道我是否在这里遗漏了任何内容或有任何可以解决此问题的建议吗?
【问题讨论】:
-
代码看起来与我成功使用的代码几乎相同。你的
Domain有没有可能不正确?您是否尝试过只使用using (var principalContext = new PrincipalContext(ContextType.Domain)),它应该连接到默认域? -
@ste-fu 这行得通!谢谢你。显然我给它的域是不正确的。你想用那个来回答它,以便我可以接受它作为答案吗? :)
标签: c# asp.net .net iis web-applications