.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" }
);
此外,您应该小心指定其他默认值的方式。您在此处定义的是 action
和 productName
的可选值,它们默认为您在 defaults
.
中指定的值
因此,以下 URLs 将起作用:
/Product
/Product/Show
通常制作"default"产品没有任何意义。将 action
和 productName
设为 URL.
中的必需参数会更有意义
routes.MapRoute(
"Product",
"Product/{action}/{productName}",
new { controller = "Product" }
);
最近遇到这个问题:
我有这条来自 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" }
);
此外,您应该小心指定其他默认值的方式。您在此处定义的是 action
和 productName
的可选值,它们默认为您在 defaults
.
因此,以下 URLs 将起作用:
/Product
/Product/Show
通常制作"default"产品没有任何意义。将 action
和 productName
设为 URL.
routes.MapRoute(
"Product",
"Product/{action}/{productName}",
new { controller = "Product" }
);