2009-10-24 4 views
0

У меня возникли проблемы с настройкой маршрутизации в MVC. Я думаю, я понимаю, как это работает, но я просто не могу установить правильные пути.Проблемы с маршрутизацией ASP.NET MVC

В основном я хочу сделать что-то похожее на то, как StackOverflow работает так:

http://localhost/faq

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

Кроме того, я попытался добавить новый маршрут что-то вроде этого:

http://localhost/Boxes/25

Таким образом, коробка представляет собой контроллер, 25, очевидно, идентификатор (параметр). Подобно тому, как StackOverflow имеет: https://stackoverflow.com/questions/[question число]/[вопрос заголовка]

Так что я попытался сделать это:

routes.MapRoute(
     "Boxes", 
     "Boxes/{boxnumber}", 
     new { 
      action="Details", cubenumber = "" 

} );

не имеет успеха.

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

Спасибо большое, ребята!

ответ

2

Попробуйте следующее:

routes.MapRoute(
     null, // optional route name 
     "faq", 
     new { controller="Home", action="Faq" }); 

routes.MapRoute(
     null, // optional route name 
     "Boxes/{boxnumber}", 
     new { controller="Boxes", action="Details", boxnumber = ""}); 

// Original route, if needed, should come AFTER more specialized routes. 
routes.MapRoute(
     "Default",            // Route name 
     "{controller}/{action}/{id}",        // URL with parameters 
     new { controller = "Home", action = "Index", id = "" }); // Parameter defaults 

Некоторые замечания, которые могут помочь вам понять это лучше:

  • контроллера и действия, параметры должны быть указаны, либо в явном виде во входящем URL или через (если отсутствует во входящем URL-адресе)
  • значительно добавлен порядок добавления маршрутов потому что первое совпадение будет использоваться для каждого входящего URL-адреса.В приведенном выше примере, если первоначальный маршрут добавлен первым, другие никогда не будут сопоставлены (поскольку исходный маршрут указывает значения по умолчанию для всех параметризованных частей URL-адреса)
  • имя маршрута необязательно, необходимо только в том случае, если вы используя имена маршрутов для генерации исходящих URL-адресов
+0

Второй маршрут (для ящиков) скроет все действия в методе «Коробки». Убедитесь, что у вас есть ограничение на такие маршруты, как эти –

+0

Как вы добавляете ограничение? –

1

Когда вы определяете маршрут, он должен, как минимум, содержать две части информации: контроллер и действие. Эти значения могут либо проходить как параметр (т. Е. Часть «{параметр» »в шаблоне URL-адреса), либо как значение по умолчанию.

Пример маршрута, который вы вставили выше, включает в себя действие, но не содержит контроллер, поэтому он не способен удовлетворить запрос. Поскольку ваше имя контроллера - «BoxesController», вы можете просто добавить «controller =« Boxes »к значениям по умолчанию этого маршрута, и вы были бы хороши.

Чтобы достичь маршрута faq, вы можете просто определить маршрут, URL которого был «faq» и имел значения по умолчанию: controller = «Home», action = «Faq».