确定这不是网络问题。我在调试时遇到了这个问题 (VS2012/.Net 4.5/IIS Express 8.0)
代码:
bool rtn2 = HttpContext.Current.User.IsInRole("MyDomain\\Domain Users");
最终返回 true。但是,可能需要几分钟时间。
var test = HttpContext.Current;
var test2 = HttpContext.Current.User;
var test3 = HttpContext.Current.User.Identity;
...一切都非常快。
var test = HttpContext.Current.User.IsInRole("MyDomain\\Domain Users");
var test2 = HttpContext.Current.User.IsInRole("MyDomain\\Domain Users");
第一个电话需要几分钟,第二个是即时的。如果我更改第二个以查找其他组(假设第一个已缓存),它仍然是即时的。
我想我可能遇到了网络问题(我连接到域并通过 VPN 进行调试。)但是,如果我创建一个新的 VS2012 web 项目并将该代码放在启动页面中,它是即时的。我还可以从我的机器上搜索 Active Directory 并调出 Domain Users 组,几乎可以立即看到其中的所有人(有超过 10,000 个用户)——没问题。那么,这一定是基于项目/配置的问题吗?
试图弄清楚这个问题。一些信息:
尝试重新安装 IIS Express 我试过重启 我在一个新的测试器 Web 项目中尝试过 - 立即运行
问题似乎是机器特定的。我们将不胜感激任何帮助,甚至只是对其他故障排除步骤的建议。
最佳答案
尝试改用 System.DirectoryServices.AccountManagement
命名空间。
public static bool IsUserGroupMember(string userName, string groupName)
{
using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
using (UserPrincipal user = UserPrincipal.FindByIdentity(context, userName))
using (PrincipalSearchResult<Principal> groups = user.GetAuthorizationGroups())
{
return groups.OfType<GroupPrincipal>().Any(g => g.Name.Equals(groupName, StringComparison.OrdinalIgnoreCase));
}
}
关于c# - HttpContext.Current.User.IsInRole ("Domain\\Domain Users") 需要永远,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281201/