根据角色不工作重定向到操作。也许需要路由?

时间:2015-05-29 21:02:21

标签: c# asp.net asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing

我有以下控制器

public class GlobalAdminController : Controller
{
    // GET: GlobalAdmin
    [AuthorizeUser(Roles = "admin")]
    public ActionResult Index()
    {
        return View();
    }
}

家庭控制器是应用程序的主要登录页面

public ActionResult Index()
{
    if(User.IsInRole("admin"))
    {
        RedirectToAction("Index", "GlobalAdmin");
    }
    return View();
}

重定向到操作在调试器中执行 但是,索引操作本身并未在全局管理员上执行

我想知道是否有更好的方法来做到这一点?也许是通过路由?

1 个答案:

答案 0 :(得分:2)

您必须使用return向浏览器提供重定向信息(url)。浏览器将重定向到新位置。

public ActionResult Index()
{
    if(User.IsInRole("admin"))
    {
       return RedirectToAction("Index", "GlobalAdmin");
    }
    return View();
}

路由的目的是提供一种从控制器访问操作的方法。您无需访问GlobalAdmin/Index,而是使用该路线提供其他方式,例如admin/index

routes.MapRoute( 
     name: "Default", 
     url: "admin/{action}/{id}", 
     defaults: new { controller = "GlobalAdmin", action = "Index", id = UrlParameter.Optional } ); 

routes.MapRoute( 
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );