显然在C#类中不允许以数字开头,那么如何为ASP.NET 4.6中以数字开头的URL创建控制器呢?
示例网址:
www.domain.com/40apples/
编辑:单独路由每个URL很快就会变得很难管理。理想情况下,我正在寻找一个处理所有数字URL的解决方案。这样上面的URL示例路由到_40apples控制器,300cherries到_300cherries,1orange到_1orange
答案 0 :(得分:3)
您必须使用自定义路由,在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();
添加到路线配置中。