2009-10-13 4 views
0

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

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

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

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

ответ

0

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

Вот правила для того, как маршруты обрабатываются ...

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

ASP.NET Routing

0

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

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

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

Смежные вопросы