Вот пример маршрута, подобного вашему, с ограничением на число:
routes.MapRoute(
"Question",
"questions/{questionID}",
new { controller = "StackOverflow", action = "Question" },
new { questionID = @"\d+" } //Regex constraint specifying that it must be a number.
);
Здесь мы устанавливаем, чтобы идентификатор вопроса имел хотя бы одно число. Это также блокирует любые URL-адреса, содержащие что-либо, кроме целого числа, а также предотвращает необходимость использования значения NULL.
Примечание: Это не учитывает числа, которые превышают диапазон Int32 (-2147483647 - +2147483647). Я оставляю это как упражнение пользователю, чтобы решить. :)
Если пользователь вводит URL «questions / foo», он не будет нажимать на действие Question и провалится через него, потому что он не соответствует ограничению параметра. Вы можете обработать его дальше вниз по маршруту «перехват» / «по умолчанию», если хотите:
routes.MapRoute(
"Catchall",
"{*catchall}", // This is a wildcard routes
new { controller = "Home", action = "Lost" }
);
Это отправит пользователя к действию Lost в контроллере Home. Более подробную информацию о подстановочном знаке можно найти здесь .
NB. Catchall должен находиться в качестве ПОСЛЕДНЕГО маршрута. Размещение его дальше по цепочке будет означать, что он будет обрабатывать все остальные ниже него, учитывая ленивый характер маршрутов в ASP.NET MVC.