Маршрутизация .NET соответствует всему шаблону (подстановочный знак) с исключениями

Если, скажем, у меня есть маршрут, который определен следующим образом:, "{books}/{*all}"то любой URL, для которого определена корневая папка, будет ему соответствовать (т.е. http://mysite.com/greekbooks/somethingirrelavant.htm ).

Но что, если бы я хотел пойти дальше и хотел бы представить собственный обработчик для греческих книг, опубликованных в 1982 году (то есть URL http://mysite.com/greekbooks/1982/anythinghere ). Я действительно не хотел бы помещать эту логику в мой первый обработчик маршрута, но представить вторую, чтобы иметь дело с обслуживающими страницами, когда этот URL совпадает.

Проблема в том, что "{books}/{*all}"кушать "{books}/1982/{*all}"тоже будешь .

В основном, как вы определяете более одного обработчика маршрута при работе с '*' ( all )соответствием? Это вообще возможно?

13.10.2009 13:26:51
2 ОТВЕТА
РЕШЕНИЕ

Это можно сделать, управляя порядком определения маршрутов, поскольку URL-адрес сравнивается с маршрутами в порядке их добавления в коллекцию маршрутов.

Вот правила обработки маршрутов ...

  1. Шаблоны маршрутов, которые вы определили, или шаблоны маршрутов по умолчанию, если они есть, которые включены в тип вашего проекта.
  2. Порядок, в котором вы добавили их в коллекцию Routes.
  3. Любые значения по умолчанию, которые вы указали для маршрута.
  4. Любые ограничения, которые вы указали для маршрута.
  5. Определена ли у вас маршрутизация для обработки запросов, соответствующих физическому файлу.

ASP.NET Routing

0
13.10.2009 13:40:59

Да, это возможно. Вы бы положили свой дополнительный

{book}/{year}/{*all} 

поймать первым. Я бы сделал еще один шаг и предложил бы добавить ограничение к маршруту {book} / {year} / {* all}, чтобы оно было только числовым.

0
13.10.2009 13:40:38