.net MVC 默认路由

.net MVC default 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" }
);

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

The matched route does not include a 'controller' route value, which is required.

所以可以定义一个带有默认路由但没有指定控制器的路由?

Stephen 是正确的,不指定控制器就无法创建路由。但是,可以使用默认控制器值而不在 URL.

中传递 {controller} 的值
routes.MapRoute(
    "Product",
    "Product/{action}/{productName}",
    new { controller = "Product", action = "Show", productName = "aaa" }
);

此外,您应该小心指定其他默认值的方式。您在此处定义的是 actionproductName 的可选值,它们默认为您在 defaults.

中指定的值

因此,以下 URLs 将起作用:

  • /Product
  • /Product/Show

通常制作"default"产品没有任何意义。将 actionproductName 设为 URL.

中的必需参数会更有意义
routes.MapRoute(
    "Product",
    "Product/{action}/{productName}",
    new { controller = "Product" }
);