以数字

时间:2016-06-15 11:40:02

标签: c# asp.net .net asp.net-mvc asp.net-mvc-routing

显然在C#类中不允许以数字开头,那么如何为ASP.NET 4.6中以数字开头的URL创建控制器呢?

示例网址:

www.domain.com/40apples/

编辑:单独路由每个URL很快就会变得很难管理。理想情况下,我正在寻找一个处理所有数字URL的解决方案。这样上面的URL示例路由到_40apples控制器,300cherries到_300cherries,1orange到_1orange

1 个答案:

答案 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();添加到路线配置中。