Для этого могут потребоваться два маршрута, поскольку необязательные параметры могут быть только в конце определения маршрута:
routes.MapRoute(
"ActionlessMetrics",
"Metrics/{id}/{resource}/{period}",
new { controller = "Metrics", action = "Index" }
);
routes.MapRoute(
"Metrics",
"Metrics/{action}/{id}/{resource}/{period}",
new { controller = "Metrics" }
);
И для генерации этих ссылок:
<%= Html.ActionLink("Link1", "Index", "Metrics",
new { id = 123, resource = "cpu-0", period = "10" }, null) %>
<%= Html.ActionLink("Link2", "GetMetrics", "Metrics",
new { id = 123, resource = "cpu-0", period = "10" }, null) %>
Что приведет к:
<a href="/Metrics/123/cpu-0/10">Link1</a>
<a href="/Metrics/GetMetrics/123/cpu-0/10">Link2</a>
и выбрано правильное действие.