В определении маршрута MVC3 только последний параметр может быть необязательным. Как намекает Nat, вы можете создать несколько маршрутов для одного и того же метода действий контроллера.
Если вы хотите иметь один обязательный параметр и 2 дополнительных параметров, вы можете определить несколько маршрутов:
...MapRoute(null, "static-segment/{required}/{optional1}/{optional2}",
new { controller = "ControllerName", action = "ActionName",
optional2 = UrlParameter.Optional });
...MapRoute(null, "static-segment/{required}/{optional1}",
new { controller = "ControllerName", action = "ActionName",
optional1 = UrlParameter.Optional });
...MapRoute(null, "static-segment/{required}/{optional2}",
new { controller = "ControllerName", action = "ActionName",
optional2 = UrlParameter.Optional });
Имея один маршрут, где есть 2 дополнительных параметров является то, что вы не можете сделать в MVC3. Кроме того, наличие необязательного параметра происходит до того, как требуемый параметр в маршруте - это то, что вы не можете сделать в MVC3. Вам необходимо определить все сценарии шаблонов маршрутизации и создать маршруты, которые будут соответствовать каждому случаю в вашей схеме URL.
Если да, то как бы вы хотели определить свой шаблон URL? Если шаблон может быть отличительным, вы должны просто сопоставить его как другую запись маршрутизации – Nat