【问题标题】:.net MVC default routing.net MVC 默认路由
【发布时间】:2016-05-18 07:12:08
【问题描述】:

最近遇到一个问题:

我有来自 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" }
);

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

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

那么可以定义一个默认路由但不指定控制器的路由吗?

【问题讨论】:

  • 不,不可能。

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


【解决方案1】:

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

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

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

因此,以下 URL 将起作用:

  • /Product
  • /Product/Show

通常,制作“默认”产品没有任何意义。将actionproductName 设置为URL 中的必需参数会更有意义。

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

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 2010-11-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多