首页 > 解决方案 > ASP.NET Core:[基于策略的授权] 未指定 authenticationScheme,也未找到 DefaultChallengeScheme

问题描述

我使用基于策略的身份验证来根据登录用户的菜单权限提供访问权限。如果菜单可以访问,那么我会调用context.Succeed(requirement);但出现错误(未经授权的菜单访问),我想将其重定向到主页。我怎样才能做到这一点filterContext.Result?这是我的代码:

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) {
    var filterContext = context.Resource as AuthorizationFilterContext;
    var sessionObj = SessionManager.GetObjectFromJson<AuthenticateUserInfo>(filterContext.HttpContext.Session, "oLoginModel");
    if (context.User == null)
    {
        // no user authorizedd. Alternatively call context.Fail() to ensure a failure 
        // as another handler for this requirement may succeed
        context.Fail();
        //filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Login", action = "LogOn" }));
        return Task.CompletedTask;
    }
    //var obj = context.Requirements.
    bool hasPermission = sessionObj == null ? false : sessionObj.Menus.Any(m => m.ControllerName == requirement.ControllerName); //.Any(= requirement.ControllerName);
    if (hasPermission)
    {
        context.Succeed(requirement);
    }
    else
    {
        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Index", area = "" }));
    }
    return Task.CompletedTask;
}

我指的是Redirect From Action Filter Attribute链接,但它适用于 ASP.NET MVC,我已经在 MVC 中实现但在 MVC Core 中不起作用。

标签: .net-coreasp.net-core-mvcasp.net-core-2.0

解决方案


推荐阅读