У меня очень похожий шаблон маршрута на моем собственном сайте MVC.
routes.MapRoute(
"BlogSpecific", // Route name
"{blogSubFolder}/{controller}/{action}", // URL with parameters
new { blogSubFolder = "", controller = "", action = "Index" } // Parameter defaults
);
Я вижу два основных различия в том, что я указываю {action} в моем маршруте, а также вызываю первый параметр маршрута в качестве параметра в моем объекте ("blogSubFolder =" ",").
Теперь я только что провел некоторое тестирование и обнаружил то же поведение, которое вы видите, я убираю {действие} из своего маршрута и получаю 404. Но если я укажу действие, все сработает.
Хорошо, я создал новый проект с маршрутом по умолчанию, и мне не нужно указывать действие, по умолчанию используется индекс, как я и ожидал. Затем я добавляю новый маршрут, в котором я указываю контроллер {language} / Foo / {action}, и продолжаю получать ошибки, если я не включаю индекс в свой URL. Короче говоря, насколько я могу судить, если у вашего маршрута есть переменная, предшествующая контроллеру, вы должны указать действие в своем URL.