ASP.NET MVC 2 - делает UrlParameter. Дополнительные записи должны быть в конце маршрута?

Я перемещаю сайт от ASP.NET MVC 1 до ASP.NET MVC 2. В данный момент сайт поддерживает следующие маршруты:

/{country}/{language}/{controller}/{action}
/{country}/{controller}/{action}
/{language}/{controller}/{action}
/{controller}/{action}

Форматы для country и language различимы Regex и имеют подходящие ограничения. В MVC 1 я зарегистрировал каждый из них как отдельный маршрут - для каждой приблизительно из 20 комбинаций. В MVC 2 я пытался заставить то же самое, работающее с одним маршрутом покрывать все четыре случая, с помощью UrlParameter.Optional, но я, может казаться, не получаю его работа - если я определяю country и language как оба дополнительные, затем маршрут /Home/Index например, успешно не соответствует маршруту. Это - то, что я пытаюсь сделать:

routes.MapRoute("Default",
    "{country}/{language}/{controller}/{action}",
    new { country = UrlParameter.Optional, language = UrlParameter.Optional,
        controller = "Home", action = "Index" },
    new { country = COUNTRY_REGEX, language = LANGUAGE_REGEX });

Это просто невозможно, потому что мои optionals в начале маршрута, или я просто пропускаю что-то? Я не могу найти, что любая документация или говорит мне, что я делаю, невозможно или указать на меня в правильном направлении.

7
задан David M 10 June 2010 в 13:43
поделиться

1 ответ

Хм. Интересно.

Вот лучшее, что я мог придумать. Я предполагаю, что это плохая идея, но это единственный обходной путь, который я мог придумать. Мне было бы интересно услышать некоторые предложения / проблемы / жалобы.

Вы можете отобразить близорукий маршрут следующим образом:

routes.MapRoute(
    "Localized",
     "{*loc}",
     new { controller = "Localizer", action = "RedirectIt" },
     new { loc = REGEX_CONSTRAINT_FOR_ENTIRE_ROUTE_VALUE }
); 

Затем, в вашем контроллере Localizer, вы можете перенаправить на нужное действие, как хотите:

public class LocalizerController : Controller
{
    public ActionResult RedirectIt(string loc)
    {
        //split up the loc string
        //and determine the correct redirect path for the request
    }
}

Я человек дешевых трюков. Что я могу сказать?

2
ответ дан 7 December 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: