在asp.net mvc中创建多个路由

时间:2011-05-06 07:42:31

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

我正在尝试在asp.net mvc中创建路由

    routes.MapRoute(
        "Localization", // Route name
        "{Culture}/{controller}/{action}/{id}", // URL with parameters
        new { Culture = "en-US", controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}", // URL with parameters
        new { controller = "Home", action = "Index"} // Parameter defaults
    );

概念很简单...... 控制器应该能够通过en-us / Controller / Action或控制器/动作调用... 有可能吗?

1 个答案:

答案 0 :(得分:2)

路线约束

您必须在第一条路线上使用路线约束,该路线将定义如何形成文化字符串。请改为尝试此路线定义:

routes.MapRoute(
    "Localization",
    "{Culture}/{controller}/{action}/{id}",
    new { Culture = "en-US", controller = "Home", action = "Index", id = UrlParameter.Optional },
    new { Culture = @"\w{2}(?:-\w{2})?" }
);
routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

路由约束正则表达式并不完全正确,因为我可以回想起有三字母代码的文化。我定义的正则表达式允许一般文化,如:

/en/Controller

/en-US/Controller
/en-UK/Controller

根据自己的喜好调整。