C# 授权核心保持MVC4Web应用程序的循环

C# 授权核心保持MVC4Web应用程序的循环,c#,asp.net-mvc-4,authorization,C#,Asp.net Mvc 4,Authorization,我实现了一个自定义属性,它基本上检查用户是否在某个组中。如果是,它将处理未经授权的请求。我遇到的问题是,代码不断循环并找到问题所在。如果我有 我的代码如下: protected override bool AuthorizeCore(HttpContextBase httpContext) { if (base.AuthorizeCore(httpContext)) { var context = new PrincipalCont

我实现了一个自定义属性,它基本上检查用户是否在某个组中。如果是,它将处理未经授权的请求。我遇到的问题是,代码不断循环并找到问题所在。如果我有

我的代码如下:

protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (base.AuthorizeCore(httpContext))
        {
            var context = new PrincipalContext(ContextType.Domain, "DOMAIN");

            UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, httpContext.User.Identity.Name);

            if (userPrincipal != null)
            {
                PrincipalSearchResult<Principal> groups = userPrincipal.GetGroups();

                bool found = groups.Any(item => item.Name == "NAME OF GROUP HERE");

                if (found)
                {
                    return false;
                }
            }

            return true;
        }
        return false;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary
            {
                {"action", "AccessDenied"},
                {"controller", "Error"}
            });

    }
希望有人能帮助我


谢谢

错误控制器或AccessDenied操作是否应用了筛选器?如果是这样的话,就会导致循环。在全局级别而不是控制器级别应用过滤器时,情况似乎就是这样。向筛选器添加一个检查,可能是“这是错误控制器或用户检查已通过”。错误控制器和accessdenied没有应用筛选器。我应该将检查应用到过滤器的哪一部分?您将过滤器添加到
全局过滤器集合
。。。这使得它对所有控制器和操作都是全局的。为什么您认为这不包括
ErrorController
?在您的位置,我将删除全局筛选器,并将该属性添加到应用程序中需要此授权检查的每个控制器。好的,我想阻止某个特定组实际访问应用程序,因此它被添加到global.asax中。我注意到的一件事是,如果我在HandleUnauthorizedRequest方法中添加base.HandleUnauthorizedRequest(filtercontext),它不会循环,但不会重定向filter.result,这是一个奇怪的地方,你永远不能为他们提供拒绝访问页面-它还要求用户通过检查!
 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 {
    filters.Add(new AuthorizeADAtttribute());           
 }