asp net mvc url стратегия маршрутизации и интернационализация - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть веб-сайт с такими URL-адресами: www.mysite.com/controller/action/id

Мне нужно создать URL-адреса для других языков (английский), поэтому я использовал ALEX ADAMYAN реализацию MultiCultureMvcRouteHandler .Так что теперь у меня есть URL-адреса, как это:www.mysite.com/en/controller/action/idwww.mysite.com/fr/controller/action/id

но мне нужно, чтобы у моих старых URL-адресов был один по умолчанию, то есть иметь:www.mysite.com/en/controller/action/idwww.mysite.com/controller/action/id

Поэтому мне интересно, как я могу изменить маршруты, в своей реализации alex зацикливает маршруты и добавляет параметр en / fr ко всем маршрутам, чтобы он перезаписывалпрежние маршруты, затем прежние URL-адреса отбрасываются, чего я хочу избежать.Если я продублирую все маршруты, чтобы сохранить один с fr / en, а другой без него, может быть, это потому, что в коллекции маршрутов потерян порядок?

1 Ответ

2 голосов
/ 02 февраля 2012

Я решил эту проблему, зацикливаясь на всех своих языках:

    public static List<Language> Languages;
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        LanguageRepository langRepo = new LanguageRepository();
        Languages = langRepo.GetAllLanguages();

        foreach (Language language in Languages)
        {
            routes.MapRoute(
            "Localization_" + language.LanguageAbbreviation,
            language.LanguageAbbreviation + "/{controller}/{action}/{id}",
            new { lang = language.LanguageAbbreviation, controller = "Home", action = "Index", id = UrlParameter.Optional });
        }
        routes.MapRoute(
            "Default", 
            "{controller}/{action}/{id}", 
            new {lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional });
    }

Где langabbreviation любит "en" или "ru".

Последний маршрут для "по умолчанию" "без языка"URL-адрес похож на "www.site.com/controller/action", и вам нужно установить для него значение по умолчанию lang abbr (в моем случае - "en").

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...