Специально для чистоты эксперимента создал новое asp.net mvc 4 приложение.
Роуты :
//more detail route
routes.MapRoute(
name: "{lang}/category/{category}",
url: "{lang}/category/{category}",
defaults: new { controller = "Home", action = "Index" }
);
//more general route
routes.MapRoute(
name: "{lang}",
url: "{lang}",
defaults: new { controller = "Home", action = "Index" }
);
HomeController :
[HttpGet]
public ActionResult Index(string category)
{
return View("~/Views/Home/index.cshtml");
}
На view :
Url.Action("Index","Home", new {lang="en"});
А теперь вопрос - почему на любой странице Url.Action генерирует в html "/en" (как и задумано), но вот на странице "/en/category/1" - этот же Url.Action генерирует уже "/en/category/1"?
Выглядит так, как будто category route value просачивается из урла на генерацию Url.Action.
Неужели данные роутов с URL как-то аффектают генерацию самих роутов? Может, кто сталкивался или сможет навести на полезную ссылку с объяснением подобного поведения - буду благодарен.
ps. Решил через Action.RouteUrl и указанием нужного роута по имени, но вопрос это не снимает.
Update :
stackoverflow.com/questions/20349681/urlhelper-act...
всё таки это by design, при формировании урла - в учёт берутся и текущие route data из Request.