MVC5 [授权]重定向到默认路由而不是属性路由

时间:2014-12-12 01:39:27

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

我有以下内容:

    [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在重定向时使用属性路由?

2 个答案:

答案 0 :(得分:9)

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

LoginPath = new PathString("/login")

原因是由于您添加了属性路由,因此现有路由无效。

答案 1 :(得分:1)

我从某个网站复制,我使用记事本进行组合,但理想情况是在这里。

    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" } 
                });
        }
    }