Я хочу создать многоязычные URL-адреса для моего проекта ASP.NET MVC 3.
Язык не по умолчанию должен передаваться в URL-адресе в качестве первого параметра с использованием маршрутизации.Например, / es / blog / some-blog-post-slug
Английский будет использоваться в качестве языка по умолчанию и не должен указывать язык в URL.Как / blog / some-blog-post
Я пытался сделать это с маршрутизацией, но либо с разрывом маршрутизации, либо с генерацией 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
Это почти то, что мне нужно
Но когда я открываю тестовое представление с "http://localhost:19038/es/test/details/my-blog-post-one"
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" в параметрах контроллера по умолчанию - это не помогло.
Я мог бы добавить язык ко всем URL-адресам, но я хочу, чтобы URL-адреса были по умолчанию ("en")язык, чтобы пропустить язык в URL, и если даже кто-то передает «en» - перенаправить на URL без языка, и когда URL генерируется для «en» URL не должен включать его.
Что является правильнымспособ сделать такую вещь?
Спасибо.