Независимо от того, как вы это делаете, когда вы добавляете категории, вы, очевидно, рискуете перейти на другие страницы сайта - например, если у вас есть раздел вашего сайта с именем / account, а затем кто-то создает категориюс именем "account", что должно произойти?
Тем не менее, есть более простой ответ, чем написание собственного класса Routing.Вы можете использовать Regex в категории Route и сделать его первым правилом.Например, если только 2 категории на сайте были куртками и свитерами:
routes.MapRoute(
"Categories",
"{CategoryName}",
new { controller = "News", action = "Category" },
new { CategoryName = "(jackets|sweaters)" }
);
Последний аргумент - это RouteConstraint, основанный на Regex, и поэтому маршрут будет зависеть от маршрутов, включенных после него, если путьни / jackets, ни /sweaters.
Очевидно, что вы хотите быть более надёжным, поэтому вы можете создать метод для построения Regex при запуске приложения:
routes.MapRoute(
"Categories",
"{CategoryName}",
new { controller = "News", action = "Category" },
new { CategoryName = "(" + String.Join("|", categories) + ")" }
);
categories
здесьдолжно быть что-то, что вы предоставляете - какой-то массив или фид базы данных имен категорий в вашем приложении.