您必须使用自定义路由,在您的 RegisterRoutes 方法中,您可以添加另一个看起来像这样的路由:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"ApplesRoute", // Route name
"40apples/{action}", // URL with parameters
new { controller = "Apples", action = "Index" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
如果您希望您的路线捕获以数字+苹果开头的任何内容,您可以使用正则表达式约束。像这样的:
routes.MapRoute(
"ApplesRoute", // Route name
"{number}apples/{action}", // URL with parameters
new { controller = "Apples", action = "Index" } // Parameter defaults
,new {number = @"\d+" } //constraint
);
更通用的方法是捕获所有以数字 + 单词开头的路线。然后你可以像这样构建你的路线和约束:
routes.MapRoute(
"NumbersRoute", // Route name
"{numberfruit}/{action}", // URL with parameters
new { controller = "Numbers", action = "Index" } // Parameter defaults
,new { numberfruit = @"\d+[A-Za-z]" } //constraint
);
与 Organic 讨论后编辑:
在这种情况下解决问题的方法是使用属性路由。如果您使用的是 mvc 5 或更高版本,则效果很好。
然后你会添加一个类似的属性路由到你的控制器:
[RoutePrefix("40apples")]
然后是每个特定操作的另一条路线:
[Route("{Buy}")]
不要忘记将routes.MapMvcAttributeRoutes(); 添加到您的路由配置中。