2010-02-03 2 views
1

Я пытаюсь сгенерировать маршрут с использованием маршрутизации ASP.NET, но я хочу, чтобы он применялся, только если некоторые значения являются числовыми.Маршрутизация ASP.NET - добавление маршрута только в том случае, если числовое?

 // Routing for Archive Pages 
     routes.Add("Category1Archive", new Route("{CategoryOne}/{Year}/{Month}", new CategoryAndPostHandler())); 
     routes.Add("Category2Archive", new Route("{CategoryOne}/{CategoryTwo}/{Year}/{Month}", new CategoryAndPostHandler())); 

Есть ли все равно, если {Year} и {Month} являются числовыми значениями. В противном случае эта маршрутизация конфликтует с другими маршрутами.

ответ

0

Хорошо, благодаря Ричарду и Мартин за то, что указал мне в правильном направлении. Синтаксис, который мне нужен, это:

routes.Add("Category1Archive", new Route("{CategoryOne}/{Year}/{Month}/", new CategoryAndPostHandler()) { Constraints = new RouteValueDictionary(new { Year = @"^\d+$", Month = @"^\d+$" }) }); 
routes.Add("Category2Archive", new Route("{CategoryOne}/{CategoryTwo}/{Year}/{Month}/", new CategoryAndPostHandler()) { Constraints = new RouteValueDictionary(new { Year = @"^\d+$", Month = @"^\d+$" }) }); 
3

Вы можете достичь фильтр, который вы хотите с помощью constraints:

routes.MapRoute(
    "Category1Archive", 
    new Route("{CategoryOne}/{Year}/{Month}", 
      null, 
      new {Year = @"^\d+$", Month = @"^\d+$"}, 
      new CategoryAndPostHandler() 
    ) 
); 

routes.MapRoute(
    "Category2Archive", 
    new Route("{CategoryOne}/{CategoryTwo}/{Year}/{Month}", 
      null, 
      new {Year = @"^\d+$", Month = @"^\d+$"}, 
      new CategoryAndPostHandler() 
    ) 
); 
Смежные вопросы