我想为ASP.NET MVC 3项目创建多语言URL。ASP.NET MVC 3中的多语言URL - 避免多语言URL中的默认语言代码
非默认语言应作为使用路由的第一个参数在URL中传递。 Like/es/blog/some-blog-post-slug
英语将被用作默认语言,并且不需要在URL中传递语言。喜欢/博客/一些博客文章
我试图做与路由,但路由中断或URL生成。
我尝试了很多路由选项,并使用自定义路由。 目前我有:
routes.MapRoute(
"", // Route name
"{lang}/{controller}/{action}/{slug}", // URL with parameters
new { controller = "Test", action = "Index", slug = UrlParameter.Optional }, // Parameter defaults
new { lang = "^[a-z]{2}$" }
);
routes.MapRoute(
"", // Route name
"{controller}/{action}/{slug}", // URL with parameters
new { controller = "Test", action = "Index", slug = UrlParameter.Optional } // Parameter defaults
);
在我的测试观点,我有:
@Url.RouteUrl(new { controller = "Test", action = "Details", slug = "some-blog-post-slug" })
<br />
@Url.RouteUrl(new { lang = "es", controller = "Test", action = "Details", slug = "some-blog-post-slug" })
当我打开从"http://localhost:19038/test/details/my-blog-post-one"
URL测试视图我在浏览器中看到:
/Test/Details/some-blog-post-slug
/es/Test/Details/some-blog-post-slug
这是相当我需要的很多
但是当我从打开测试视图URL我看到产生不同的URL:
/es/Test/Details/some-blog-post-slug
/es/Test/Details/some-blog-post-slug
当我打开"http://localhost:19038/en/test/details/my-blog-post-one"
我得到:
/en/Test/Details/some-blog-post-slug
/es/Test/Details/some-blog-post-slug
而且"http://localhost:19038/xx/test/details/my-blog-post-one"
生产:
/xx/Test/Details/some-blog-post-slug
/es/Test/Details/some-blog-post-slug
为什么 “XX” 追加?我不会将语言传递给Razor HTML URL助手。 我也尝试在控制器的默认参数中使用lang =“en” - 它没有帮助。
我最终可能会将语言添加到所有网址,但是我希望带有默认(“en”)语言的网址在网址中省略该语言,并且即使有人传递了“en” - 也不会重定向到该网址语言, ,并且为“en”URL生成URL时不应包含它。
做这种事情的正确方法是什么?
谢谢。
我使用这种方式现在。还没有找到更好的。 – Zelid 2012-03-21 14:47:21