Это может быть довольно сложно.
При попытке выяснить, как сопоставить данные маршрута с маршрутом, система в настоящее время выполняет поиск сверху вниз, пока не найдет что-то, где предоставляется вся необходимая информация, а затем вставит все остальное в параметры запроса.
Поскольку необходимая информация для маршрута "Content / {* pathInfo}" всегда полностью удовлетворяется (на этом маршруте вообще не требуется никаких данных), и она находится в верхней части списка маршрутов, тогда все ваши попытки сопоставления с безымянные маршруты будут соответствовать этому шаблону, и все ваши URL будут основаны на этом ("Content? action = foo & controller = bar")
К сожалению, нет пути к этому с маршрутами действий. Если вы используете именованные маршруты (например, выбирая Html.RouteLink вместо Html.ActionLink), то вы можете указать имя маршрута для сопоставления. Это менее удобно, но более точно.
IMO, из-за сложных маршрутов система маршрутизации действий в основном падает. В приложениях, где у меня есть что-то отличное от маршрутов по умолчанию, я почти всегда в конечном итоге возвращаюсь к генерации URL на основе именованного маршрута, чтобы убедиться, что я всегда получаю правильный маршрут.