Полагаю, если вы укажете следующие маршруты:
routes.MapRoute(
null,
"Bar/{action}/{id}",
new { controller = "Bar", action = "View", id = UrlParameter.Optional },
new { action = "Index|Next" } //contrain route from being used by other action (if required)
);
routes.MapRoute(
null,
"Foo.aspx/{id}",
new { controller = "Bar", action = "View", id = UrlParameter.Optional }
);
//specify other routes here for the other legacy routes you have.
Тогда это должно решить вашу первую проблему. Если пользователь указывает Foo.aspx в URL-адресе, он будет перенаправлен на действие «Просмотр».
Если ссылка действия:
@Html.ActionLink("Click me", "Index", "Bar")
указано, тогда будет использоваться первый маршрут (в зависимости от порядка).
Однако я не мог понять, как указать, если Foo.aspx?id=...
, то перейти к одному маршруту, если указан Foo.aspx
, а затем перейти к другому маршруту. Поэтому я бы проверил, является ли id пустым в действии. Однако, если вы это выясните, я бы очень хотел знать.
Надеюсь, это поможет.