Запрос на лучший способ решения этой проблемы:
в моем контроллере у меня есть следующее действие
public ActionResult Member(string id){return View();}
другое действие в том же контроллере
public ActionResult Archive(string year){return View();}
в моем global.asax
routes.MapRoute(
"Archive", // Route name
"{controller}/{action}/{year}", // URL with parameters
new { controller = "Home", action = "Index", year = "" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id="" } // Parameter defaults
);
если я назову этот URL-адрес mysite.com/archive/2009, это работает, потому что с этим запросом работает параметр, ожидающий действия с именем «year» и первой схемой маршрута. Но если я назову этот URL-адрес mysite.com/member/john, то получится этот URL-адрес mysite.com/member?id=john
Таким образом, похоже, что мой первый маршрут в global.asax имеет ту же конструкцию, но с другим именем параметра, у того, у которого правильное имя параметра, будет правильный URL (mysite.com/archive/2009), а для другого - нет. Как я могу решить эту проблему? Я могу изменить таблицу маршрутов так, чтобы она ожидала общего имени параметра, такого как «param», но мне нужно также изменить всю сигнатуру действия на «param», и оно не очень описательно (param вместо year или param вместо id).