Asp.net mvc 我是否可以根据用户是否已通过身份验证来更改MVC控制器中的路由?

Asp.net mvc 我是否可以根据用户是否已通过身份验证来更改MVC控制器中的路由?,asp.net-mvc,Asp.net Mvc,我为我的申请设置了以下路径: routes.MapRoute("DefaultRedirect", "", new { controller = "Account", action = "Login" } ); 在我的控制器中,我有: [AllowAnonymous] public ActionResult Login(string returnUrl) { ViewBag.ReturnUrl = returnUrl; return View(); } 但是,

我为我的申请设置了以下路径:

routes.MapRoute("DefaultRedirect",
    "",
    new { controller = "Account", action = "Login" }
);
在我的控制器中,我有:

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

但是,如果用户已经通过身份验证,我不想转到帐户控制器和登录操作。是否有某种方法可以在进入控制器之前检查身份验证,或者我是否应该签入控制器,然后更改为其他控制器/操作?

我认为在路由配置中无法做到这一点。路由在中的身份验证之前发生,因此您没有任何上下文在路由配置中进行切换。如果用户经过身份验证,则需要返回另一个
ActionResult

[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    if(User.Identity.IsAuthenticated)
    {
        return RedirectToAction("Index", "Home");
    }

    ViewBag.ReturnUrl = returnUrl;
    return View();
}

谢谢你的帮助。在这种情况下,我想重定向到主控制器和索引操作。是否可以直接指向另一个控制器中的某个操作?我个人会签入目标控制器,因为它应该很少被调用。也就是说,您可以使用自定义路由处理程序(您可以在那里手动检查表单验证cookie)来做您想要做的事情,但是为什么还要进行额外的工作呢。