【问题标题】:MVC5 [Authorize] redirecting to default route instead of attribute routeMVC5 [Authorize] 重定向到默认路由而不是属性路由
【发布时间】:2014-12-12 11:47:56
【问题描述】:

我有以下:

    [Route("whitelist")]
    [Authorize(Roles = "Administrator")]
    public ActionResult Whitelist() {
        var vm = new WhitelistViewModel();
        return View(vm);
    }

    [Route("login")]
    [AllowAnonymous]
    public ActionResult Login(string returnUrl) {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }

但是,当我以未经身份验证的用户身份导航到 /whitelist 时,我会导航到无效的 /Account/Login。在这种情况下,我如何告诉 MVC5 在重定向时使用属性路由?

【问题讨论】:

  • 为什么无效?您在Whitelist() 方法上有[Authorize(Roles = "Administrator")],因此如果您未授权,您将被重定向到Login()。你期望发生什么?
  • @StephenMuecke 无效,因为登录的路由是“登录”,通过属性路由覆盖。
  • 请看这个stackoverflow.com/questions/7080872/… Override OnActionExecuting。我们可以在这个动作中做很多事情,类似于我们在 page_load 之前在页面预加载中做一些事情。
  • @user666,对不起,不明白你在说什么。您是否有多个名为 Login() 的方法,而这一个不在 AccountController 中?
  • @StephenMuecke - 路由 /Account/Login 无效,因为我已经覆盖了它!!!

标签: asp.net-mvc asp.net-mvc-5


【解决方案1】:

App_Start/Startup.Auth.cs 中,您需要更改重定向的默认登录路径。

LoginPath = new PathString("/login")

原因是你添加了一个属性路由,那么现有的路由就无效了。

【讨论】:

    【解决方案2】:

    我从某个网站复制,我用记事本结合,但理想情况下在这里。

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
    
            IPrincipal user = filterContext.HttpContext.User;  
            if (!user.Identity.IsAuthenticated)
            {
                // Redirect to login page
                filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary 
                    { 
                        { "controller", "Login" }, 
                        { "action", "NoAccess" } 
                    });
            }
        }
    

    【讨论】:

    • 使用它,通过Authorize(Roles = "Admin") 指定角色不再起作用(无法识别角色)。
    • 嗨 SB2005 你的意思是 Roles = "Admin" 会出错?
    • 是的,如果我使用覆盖属性,它会在 VS 中保持红色/错误:/
    • 我们没有覆盖该属性,我们只是在基本控制器中创建 OnActionExecuting 并由所有控制器继承,因此它们知道在页面加载之前要做什么。就像我在这里控制 UICulture 的多语言一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多