Усовершенствованные учебные руководства по Маршрутизации ASP и примеры

Одно из главных препятствий, которые я, кажется, имею недавно, добирается, моя голова вокруг некоторых более сложных требований маршрутизации для некоторого MVC основывала приложения, которые я разрабатывал. У меня есть проблемы, находя, что правильный набор учебных руководств обходит меня через него для получения полного понимания.

То, что я хотел бы найти, является полным набором учебных руководств для всего направляющего от основного (контроллер/действие/идентификатор) к усовершенствованному.

Примером того, что я называю расширенной маршрутизацией, являются вещи как:

/blog/year/month/day/title - отобразился бы на контроллер: blog и действие: post и как параметры: year, month, day и title

/blog/title - отобразился бы на контроллер: blog и действие: post и как параметры: title

/title - отобразился бы на контроллер: blog и действие: post и как параметры: title

Я мог отобразить каждый возможный набор на явный маршрут в глобальном использовании базы данных, но это кажется, что побеждает точку наличия маршрута механизма маршрутизации к корректному месту. Я определил бы правило однажды.

9
задан Kieron 8 August 2012 в 07:39
поделиться

1 ответ

Я не понимаю, почему вы не можете просто определить каждый из них как отдельный маршрут, используя при необходимости регулярное выражение. Например, чтобы различать / блог / год / месяц / день / заголовок и / блог / заголовок .

Каждый из этих наборов представляет собой отдельный случай, и вам нужно указать MVC, что с каждым из них делать. Вы можете сделать это, определив правило один раз в файле Global.asax.cs :

Для первого случая: / блог / год / месяц / день / title

routes.MapRoute(
    "Blog Full Route", // Route name
    "blog/{year}/{month}/{day}/{title}", // URL with parameters
    new {controller = "blog", action = "post"},   // Defaults
    new {year = @"\d+", month= @"\d+", day = @"\d+"} // Constrain parameters with RegEx patterns
    );

Для второго случая: / blog / title

routes.MapRoute(
    "Blog Title Route", // Route name
    "blog/{title}", // URL with parameters
    new {controller = "blog", action = "post"},   // Defaults
    );

Для последнего случая: / title

routes.MapRoute(
    "Title Route", // Route name
    "{title}", // URL with parameters
    new {controller = "blog", action = "post"},   // Defaults
    );

Хитрость заключается в том, чтобы разместить эти маршруты в точном порядке, с наименее конкретным внизу. Изменение порядка приведет к использованию неправильного маршрута (особенно в последних двух). Если последний регистр был заменен вторым, URL-адреса типа blog / SomeTitle перенаправлялись на действие post с заголовком blog .

Каждый раз, когда вы создаете маршрут для чего-то, имейте в виду следующее:

  1. Ограничьте параметры маршрута с помощью RegEx
  2. Будьте очень осведомлены о порядке маршрута (какой маршрут предшествует которому)
  3. Волнистые скобки {something} обозначают параметры действия

Некоторые полезные руководства:

17
ответ дан 4 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: