首页 > 解决方案 > 如何从 asp net core 中的 AuthorizationFilter 重定向到登录页面?

问题描述

当我返回ForbidResult()时,它会重定向到AccessDenied启动时指定的页面。我想做同样的事情,UnauthorizedResult()但重定向到Login页面。

PS 我没有Authorize在我自己的控制器中使用标准属性。

授权过滤器

public class MyFilter : IAuthorizationFilter
{
    //

    public MyFilter()
    {
        //
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        if (context.HttpContext.User.Identity.IsAuthenticated)
        {
            var hasPermission= ... ;
            if (!hasPermission)
            {
                context.Result = new ForbidResult();
            }
        }
        else
        {
            context.Result = new UnauthorizedResult();
        }
    }
}

启动

services.AddAuthentication.AddCookie(options =>
            {
               options.LoginPath = "/Accounts/Login";
                options.LogoutPath = "/Accounts/Logout";
                options.AccessDeniedPath = "/Accounts/AccessDenied";
            });

标签: c#asp.netasp.net-mvcasp.net-core

解决方案


您可以使用 RedirectResult 或 context.Response.Redirect("/Accounts/Login"); 进行测试

public class MyFilter : IAuthorizationFilter
{
    //

    public MyFilter()
    {
        //
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        if (context.HttpContext.User.Identity.IsAuthenticated)
        {
            var hasPermission= ... ;
            if (!hasPermission)
            {
                context.Result = new ForbidResult();
            }
        }
        else
        {
            context.Result = new RedirectResult("/Accounts/Login");
        }
    }
}

推荐阅读