.net MVC默认路由

时间:2016-05-18 07:12:08

标签: asp.net-mvc controller routing asp.net-mvc-routing

最近我遇到了这个问题:

我有来自RouteConfig的这条路线

public static void RegisterRoutes(RouteCollection routes)
{
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 routes.MapRoute(
     "",
     "{controller}/{action}/{productName}",
     new
     {
        action = "Show",
        productName = "aaaa"
     }
   );
}

现在,他们需要添加路由以确保所有不再存在或已更改ID的产品将显示在产品中。

推荐的解决方案是:

routes.MapRoute(
    "Product",
    "Product/{action}/{productName}",
    new { action = "Show", productName = "aaa" }
);

但是路由的默认值中没有控制器,它将抛出

的异常
  

匹配的路线不包含“控制器”路线值   是必需的。

因此可以定义具有默认路由但未指定控制器的路由吗?

1 个答案:

答案 0 :(得分:0)

Stephen是正确的,没有指定控制器就无法建立路线。但是,可以使用默认控制器值,而不是传递URL中{controller}的值。

routes.MapRoute(
    "Product",
    "Product/{action}/{productName}",
    new { controller = "Product", action = "Show", productName = "aaa" }
);

此外,您应该注意如何指定其他默认值。您在此处定义的内容是actionproductName的可选值,默认为您在defaults中指定的值。

因此,以下网址将起作用:

  • /Product
  • /Product/Show

通常,制作一个"默认"没有任何意义。产品。将actionproductName纳入网址中的必需参数会更有意义。

routes.MapRoute(
    "Product",
    "Product/{action}/{productName}",
    new { controller = "Product" }
);