ASP.NET MVC 2 маршрутизация: добавлен язык, не работает, если оставить в URL - PullRequest
0 голосов
/ 08 февраля 2011

У меня есть некоторые проблемы с маршрутизацией в MVC 2. Возможно, это простая проблема, но я не могу заставить ее работать. Я зарегистрировал второй маршрут, включая язык:

routes.MapRoute(
    // Route name
    "LangRouting",         
    // URL with parameters
    "{currentLang}/{controller}/{action}/{id}",         
    // Parameter defaults
    new { currentLang = "de", controller = "Home", action = "Index", 
        id = UrlParameter.Optional }             
);

routes.MapRoute(
    // Route name
    "Default",
    // URL with parameters
    "{controller}/{action}/{id}",                 
    // Parameter defaults
    new { controller = "Home", action = "Index"}             
);

Теперь, когда я звоню {...}/de/Home/Index/, все работает нормально. Но если я оставлю язык и позвоню {...}/Home/Index/, страница не будет найдена («Ресурс не найден»). Я ожидал бы, что это должно работать без языка в URL, и что MVC вставит туда мое значение по умолчанию. Как это работает еще?

1 Ответ

4 голосов
/ 08 февраля 2011

Вы должны использовать ограничение для языка.

/Home/Index 

будет переведено в первое правило как

lang = Home
controller = Index
action = Index (from defaults)

Это должно сработать:

routes.MapRoute("Default with language", "{lang}/{controller}/{action}/{id}", new
{
    controller = "Home",
    action = "Index",
    id = UrlParameter.Optional,
}, new { lang = "de|en" });
routes.MapRoute("Default", "{controller}/{action}/{id}", new
{
    controller = "Home",
    action = "Index",
    id = UrlParameter.Optional,
    lang = "en",
});
...