Ваши требования противоречивы. Например, какой маршрут следует выбрать, если у вас есть статья с seoFriendlyName == "page-6" и реальным pageNumber == 2?
Я бы посоветовал вам изменить ваши требования на
~/article/ -> Action = Index, pageNumber = 1
~/article/page/5 -> Action = Index, pageNumber = 5
~/article/page/1 -> ~/article/
~/article/foo -> Action = Details, seoFriendlyName = foo
и тогда у вас будут следующие маршруты:
routes.MapRoute(
null,
"article/page/{pageNumber}",
new { controller = "MyController", action = "Index", pageNumber = 1 },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article",
new { controller = "MyController", action = "Index", },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article/{seoFriendlyName}",
new { controller = "MyController", action = "Details", },
new[] { "MyNamespace" }
);
UPDATE
В ответ на комментарии:
для этого конкретного требования вам нужно изменить ваши маршруты следующим образом:
routes.MapRoute(
null,
"article",
new { controller = "MyController", action = "Index", pageNumber = 1 },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article/page/{pageNumber}",
new { controller = "MyController", action = "Index", },
new[] { "MyNamespace" }
);
routes.MapRoute(
null,
"article/{seoFriendlyName}",
new { controller = "MyController", action = "Details", },
new[] { "MyNamespace" }
);