我正在尝试创建一个带有正则表达式约束的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
答案 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
。