В определении маршрута 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.