代码之家  ›  专栏  ›  技术社区  ›  Rodrigo Waltenberg

不明白为什么这条MVC2路线不起作用

  •  0
  • Rodrigo Waltenberg  · 技术社区  · 14 年前

    我试图创建一个带有正则表达式约束的ASP.NET MVC2路由来过滤语言名(如en-us、pt-br),但不幸的是,它不起作用。看一看:

    routes.MapRoute(
        "Culture", // Route name
        "{culture}", // URL with parameters
        new { controller = "Home", action = "Culture" }, // Parameter defaults
        new { culture = @"^[a-z]{2}-[a-z]{2}$" }
    );
    

    有人知道吗?

    编辑: 我正在测试的URL是 http://localhost/en-us

    2 回复  |  直到 14 年前
        1
  •  0
  •   Darin Dimitrov    14 年前

    我不知道为什么它在你的案件中不起作用,但这是有效的:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            "Culture",
            "{culture}",
            new { controller = "Home", action = "Culture" },
            new { culture = @"^[a-z]{2}-[a-z]{2}$" }
        );
    
        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
    

    控制器:

    public class HomeController : Controller
    {
        public ActionResult Culture(string culture)
        {
            return View();
        }
    }
    

    网址: http://example.com/en-us 成功调用 Culture 对行动 HomeController 及格 en-us 在Culture参数中。

        2
  •  1
  •   Thomas Stock    14 年前

    可能区分大小写?

    “恩美国”

    所以你需要:

    new { culture = @"^[a-z]{2}-[A-Z]{2}$" }
    

    但是使用这个来使它不区分大小写:

    new { culture = @"^[a-zA-Z]{2}-[a-zA-Z]{2}$" }