Я работаю с ASP.NET MVC 2 и хотел бы оптимизировать мою маршрутизацию.Желаемый результат выглядит следующим образом:
http://www.url.com/Sites/
http://www.url.com/Sites/Search/NY001
http://www.url.com/Sites/NY001
http://www.url.com/Sites/NY001/Photos
Проблема этого сценария заключается в том, что я хочу по-разному относиться к битам URL в зависимости от их содержимого.Как можно себе представить, «NY001» - это идентификатор для конкретного сайта , а не для действия, которое живет в Sites
контроллере.Мое текущее решение состоит в том, чтобы определить специальную карту маршрутов для URL-адресов, специфичных для сайта, и указать каждое действие в контроллере Sites
отдельно перед этим.
// currently in place, works
routes.MapRoute("SiteList", "Sites", new { controller = "Sites", action = "Index" });
routes.MapRoute("SiteSearch", "Sites/Search/{searchString}", new { controller = "Sites", action = "Index", searchString = "" });
routes.MapRoute("SiteNotFound", "Sites/NotFound", new { controller = "Sites", action = "NotFound" });
// and so on...
routes.MapRoute("Site", "Sites/{siteId}/{action}", new { controller = "Sites", action = "Index", siteId = "" });
Поскольку это один из центральных компонентов моего веб-приложения, эти действия растут ежедневно, и список становится немного громоздким.Я хотел бы иметь возможность вывести длинный список маршрутов, специфичных для действий, к одному объявлению, подобному следующему:
routes.MapRoute("Sites", "Sites/{action}/{id}", new { controller = "Sites", action = "Index", id = UrlParameter.Optional });
Проблема состоит в том, что структура маршрутизации не может различить этот новый маршрути сайт-специфичный в приведенном выше примере;следовательно, оба совпадения.Я застрял с объявлением каждого действия отдельно?Стоит ли подумать об использовании регулярного выражения для дифференциации на основе содержимого URL-адресов?
Заранее спасибо, и заранее прошу прощения, если этот вопрос уже задавался в другой форме.