Вы должны соответствовать имени параметра для третьего. Если вы напишите:
{id}
, вы должны написать
publi c ActionResult AnyAction (int id )
id может быть любого типа
Я думаю, что между вашими маршрутами существует конфликт. Вам нужно только это сопоставление:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
, если вам нужна настраиваемая маршрутизация для других элементов, не помещайте "{controller}/{action}/..."
внутрь, потому что он возьмет первую конфигурацию маршрута, которая соответствует. Вы можете вызвать все свои маршруты, уточняя имя вашего параметра, если оно отличается от id:
http://localhost/home/firstaction?param=123
http://localhost/home/secondaction?secondparam=123
http://localhost/user/userinfo?encodedparam=123