Вроде делаю вашу работу, но - что угодно.
Я хотел бы пойти с чем-то вроде этого (будьте осторожны - это не проверено) ...
Как вы уже наверняка знаете - порядок важен.
www.site.com / Магазины / ShopName / ProductName / AddComment =>
routes.MapRoute(
"Product",
"Shops/{shopName}/{productName}/{action}",
new { controller="comment"}
);
www.site.com / Магазины / ShopName / ProductName / ASpecificCommentHere =>
routes.MapRoute(
"Product",
"Shops/{shopName}/{productName}/{commentName}",
new { controller="comment", action="details"}
);
www.site.com / Магазины / ShopName / ProductName / AddProduct =>
routes.MapRoute(
"Product",
"Shops/{shopName}/{productName}/{action}",
new { controller="product"}
);
www.site.com / Магазины / ShopName / ProductName / =>
routes.MapRoute(
"Product",
"Shops/{shopName}/{productName}",
new { controller="product", action = "details"}
);
www.site.com / Магазины / ShopName =>
routes.MapRoute(
"ShopDetails",
"Shops/{shopName}",
new { controller="shop", action = "details"}
);
www.site.com / Магазины ( NB : этот маршрут является «глобальным» для каждого контроллера) =>
routes.MapRoute(
"List",
"{controller}",
new { action = "list"}
);
Может быть, это может быть оптимизировано или хуже - это неправильно, но это должно дать вам некоторое лучшее понимание наверняка.
Не забудьте назвать магазины / контроллеры / комментарии как соответствующие действиям контроллера. Это проблема с этим подходом к маршрутизации.
И я надеюсь, вы заметили, что я бы создал 3 разных контроллера (что может и не может быть хорошим решением - это зависит от ожидаемого веса и сложности логики контроллера).
Еще один совет - читайте о привязке модели. Используя пользовательские связыватели, вы можете заменить строковые параметры (имена сущностей) фактическими уже собранными объектами. Возможно, в данном конкретном случае это не имеет смысла, но привязка модели, безусловно, является второй важной и трудной вещью для понимания при взгляде на asp.net mvc.
И я солгал, я бы не стал этого делать, потому что я предпочитаю указывать специфические для контроллера маршруты, используя атрибуты непосредственно для действий (опущено, потому что это кажется более advanced
).
Маршрутизация похожа на регулярные выражения. Есть момент, когда он просто «щелкает» и кажется естественным и легким.
Уже ответил на второй вопрос как комментарий к вашему вопросу. :)