c# - HttpContext.Current.User.IsInRole ("Domain\\Domain Users") 需要永远

标签 c# asp.net visual-studio-2012 active-directory httpcontext

确定这不是网络问题。我在调试时遇到了这个问题 (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/

相关文章:

c# - '$' 符号在 C# 6.0 中有什么作用?

asp.net - RequiredFieldValidator 不适用于 Dropdownlist

.net - 从 .Net 4.0 到 4.5 的重定向解决方案 - 如何重定向 NuGet 包?

c# - 使用 JSON.NET 在 C# 中进行不正确的序列化

c# - XPath:根据另一个节点选择一个节点?

javascript - SquishIt : How to minfy CSS files inside asp. 网络默认主题和来自 asp :ScriptManager? 的 Javascript 文件

.net - 默认为 Visual Studio 2012 中的每个项目激活代码分析

windows - 由于 MSVCR110.dll,MS Visual Studio 2012 Ultimate 无法启动

c# - 等待和不分配任务

c# - 如何在 asp.net 代码中实现 FIPS(此实现不是 Windows 平台 FIPS 验证加密算法的一部分。)