#asp.net-mvc #routing
#asp.net-mvc #маршруты
Вопрос:
У меня очень простой вопрос. Мой сайт, основанный на ASP.NET MVC может иметь много URL-адресов, но все они должны приводить к одному контроллеру. Как это сделать?
Я полагаю, мне нужна какая-то магия в Global.asax, но я не знаю, как создать маршрут, который перенаправит любой URL на конкретный контроллер.
Например, у меня есть url / about, / product / id и т.д. Но Все они должны действительно приводить к контенту / показывать, где будут распознаны части URL и будет принято решение, какую информацию показывать. Это что-то вроде CMS, когда вы не можете определить маршруты заранее. Достаточно ли этой информации?
Спасибо
Комментарии:
1. Также было бы полезно, если бы вы привели несколько примеров URL-адресов и того, что вы хотите сделать с ними в контроллере.
2. Проблема не в том, что мне нужны какие-то «бесконечные» параметры, но URL может быть коротким, например /products / id, но он должен переходить к содержимому. показывать контроллер всегда вместо продуктов. Например, индекс.
3. Один контроллер может показаться способом упростить работу, но в долгосрочной перспективе ваш код будет более организованным и простым в обслуживании, если вы будете поддерживать свою функциональность в отдельных контроллерах, как предлагают разработчики MVC.
4. как человек, который сейчас ищет решение, в котором кто-то сделал именно это… если кто-то еще хочет это сделать .. пожалуйста, просто нет!
Ответ №1:
Это звучит как ужасная идея, но, ну, если вы должны;
routes.MapRoute(
"ReallyBadIdea",
"{*url}",
new { controller = "MyFatController", action = "MySingleAction" }
);
Это перенаправляет все к одному действию в одном контроллере. Также есть {*path} и другие шаблоны URL, если вы хотите немного большей гибкости.
Комментарии:
1. Почему плохая идея? Для этого есть законное использование. Если ваше приложение переписывает URL в браузере и соответственно загружает контент, то независимо от URL вы хотите загрузить базовую страницу. Ajax позаботится о rest позже на стороне клиента.
2. Да, маму, это не просто плохая идея. Я думаю, что мир программирования — это мир создания, а не мир использования. Спасибо mamu за обнародование вашей идеи создания.
Ответ №2:
В идеале вы должны попробовать конкретизировать свои маршруты, например, если у вас есть URL-адрес /products / 42, и вы хотите, чтобы он переходил к универсальному контроллеру, вы должны указать его явно, например
routes.MapRoute(
"Poducts",
"products/{id}",
new { controller = "Content", action = "Show", id = UrlParameter.Optional }
);
затем вы должны указать другой маршрут для чего-то другого, например / customers / 42
routes.MapRoute(
"Customers",
"customers/{id}",
new { controller = "Content", action = "Show", id = UrlParameter.Optional }
);
это может показаться немного подробным, и создание одного маршрута может показаться более чистым, но проблема с одним маршрутом в том, что вы никогда не получите 404 и должны будете обрабатывать такие вещи в коде.