MapRoute未按预期工作

时间:2015-07-16 15:40:04

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

考虑下面的映射路线,当用户进入/ Home时,为什么第二条路线会击中而不是第一条?我的假设是,去/ Home会导致第一条路线被击中,但由于某种原因,第二条路线被使用。

这是为什么?

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
          "Home page behind auth",
          "Home",
          new { controller = "Home", action = "HomeSecure", id = "" }
        );

        routes.MapRoute(
          "Default",                                              
          "{controller}/{action}/{id}",                           
          new { controller = "Home", action = "Index", id = "" } 
        );
    }

编辑:为了清楚,我希望/ Home在Home控制器中转到HomeSecure操作。

EDIT2:

        public ActionResult Index()
        {
            return View();
        }

        [AuthorizeHasAccess]
        public ActionResult HomeSecure()
        {
            return View();
        }

1 个答案:

答案 0 :(得分:0)

鉴于您提供的信息,我认为这两条路线都不符合要求。 MVC将寻找带有“id”参数的方法签名,并且您的操作方法没有。如果请求确实将您带到Home控制器上的Index方法,请检查某处的错误处理程序是否正在捕获该条件,然后将您重定向到/ Home / Index

如果您按如下方式设置路由表,则第一条路由将根据需要进行匹配。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute(
      name: "Home page behind eRaider",
      url: "Home",
      defaults: new { controller = "Home", action = "HomeSecure" }
    );

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