无法弄清楚为什么这个MVC2路线不起作用

时间:2010-09-09 12:46:02

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

我正在尝试创建一个带有正则表达式约束的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}$" }
);

有没有人有任何想法?

修改:我正在测试的网址是http://localhost/en-us

2 个答案:

答案 0 :(得分:1)

个案敏感或许?

“的en-US”

所以你需要:

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

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

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

答案 1 :(得分:0)

我不知道为什么它在你的情况下不起作用,但这是有效的:

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操作,并在culture参数中传递en-us