Проблема маршрутизации MVC - PullRequest
1 голос
/ 20 мая 2011

В настоящее время я работаю над проектом MVC, в котором я пытаюсь получить вид динамической маршрутизации.Моя идея состояла в том, чтобы я оставил исходный маршрут в global.asax.cs, так что он позаботится о каждом контроллере, который я создаю.Например, контроллеры «Контакт» и «Учетная запись».

Вышеуказанные контроллеры будут иметь URL-адрес, подобный

/Contact/
/Account/Logoff/ etc.

Второй маршрут, который я хочу добавить, - это маршрут по умолчанию, когда нетКонтроллеры найдены.В этом случае я предполагаю, что это будет маршрут к странице или pagedetails.

Например, URL будут:

/BBQ/
/BBQ/Accesoires/

У меня есть три маршрута, добавленных в global.asax.cs, которыеЯ думаю, что это правильно.(Также в правильном порядке).Ниже я добавил маршруты:

routes.MapRoute(
"DefaultRoute", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Page", action = "Index", id = UrlParameter.Optional });

routes.MapRoute(
"DefaultPageRoute",
"{category}",
new { controller = "Page", action = "Index", category = UrlParameter.Optional });

routes.MapRoute(
"SecondLevelPageRoute",
"{category}/{subCategory}",
new { controller = "Page", action = "PageDetails", category = UrlParameter.Optional, subCategory = UrlParameter.Optional });

с этой настройкой, вызовы на контроллеры работают нормально, но на такие страницы, как / BBQ /, выдает ошибку ниже:

Ошибка сервера в '/ 'Приложение.

Ресурс не найден.

Если я прокомментирую первый маршрут и перейду к / BBQ / url, он будет работать как шарм.Что я наблюдаю в этом маршруте?

1 Ответ

0 голосов
/ 20 мая 2011

Сначала вы устанавливаете маршрут по умолчанию, поэтому он пытается перейти к маршруту, определенному {controller = "BBQ", Action = "Index" }

Этот маршрут должен быть последним.Тем не менее, вам нужно больше деталей в ваших маршрутах.Просто наличие маршрута категории вызовет проблемы.

Например, если этот маршрут первый

routes.MapRoute(
"DefaultPageRoute",
"{category}",
new { controller = "Page", action = "Index", category = UrlParameter.Optional });

Тогда при вызове URL / Контакт / будет предполагаться, что вы хотите перейти на Page/Index/Contact не /Contact/Index/{id}.Я бы использовал более конкретный маршрут, который означает, что вы просматриваете категорию, например:

routes.MapRoute(
"DefaultPageRoute",
"Category/{category}",
new { controller = "Page", action = "Index", category = UrlParameter.Optional });

Так что вам нужно будет использовать URL www.mysite.com/Category/BBQ, чтобы посмотреть, что вы хотите, но я не думаю, что этовсе плохо.

...