Каждый из двух указанных выше маршрутов будет направлять вас к контроллеру новостей и выполнять действие «Индекс». Если у вас нет перегрузок для действия Index, которое примет заданные вами параметры, тогда маршрут не будет работать должным образом. Например, у вас должны быть следующие два действия:
public ActionResult Index(TimePeriod timePeriod, string categoryName, int page) {..}
public ActionResult Index(string categoryName, int page) {..}
Кроме того, вы должны удалить параметр TimePeriod по умолчанию из вашего второго маршрута, поскольку вы не используете его в самом маршруте:
routes.MapRoute(
"News2", // Route name
"News/{categoryName}/{page}", // URL with parameters
new { controller = "News", action = "Index", categoryName = "All", page = 1 },
new { page = @"^\d{1,3}$" }// Parameter defaults
);
Я бы порекомендовал иметь действие для каждой категории, а не создавать маршрут для каждой категории. Вы можете упростить ваши маршруты к этому:
routes.MapRoute(
"News", // Route name
"News/{action}/{timePeriod}/{page}", // URL with parameters
new { controller = "News", action = "Index", timePeriod = TimePeriod.AllTime, categoryName = "All", page = 1 },
new { page = @"^\d{1,3}$" }// Parameter defaults
);
Затем действие для каждой категории:
public ActionResult All(TimePeriod timePeriod, string categoryName, int page) {..}
public ActionResult Sports(TimePeriod timePeriod, string categoryName, int page) {..}
public ActionResult Weather(TimePeriod timePeriod, string categoryName, int page) {..}
Таким образом, все, что вам нужно, это один маршрут.