Как удалить «Детали» в MVC URL Routing, но оставить другие действия без изменений?
-
05-07-2019 - |
Вопрос
Я хотел бы настроить маршрут для контроллера, который выполняет обычные операции CRUD, но хотел бы, чтобы действие Details не показывало «Details» в URL. Stackoverflow, похоже, настроил этот тип маршрутизации:
http://stackoverflow.com/questions/999999/
http://stackoverflow.com/questions/ask
Используя эту аналогию, мои маршруты в настоящее время выглядят так:
http://stackoverflow.com/questions/Details/999999/
Добавив следующий маршрут, я смог удалить Details
:
routes.MapRoute("Q1", "questions/{id}",
new { controller = "Questions", action = "Details" });
Однако выполнение других действий на контроллере (например, / questions / new
для этого примера) жалуется на то, что идентификатор не может быть проанализирован. Р>
Есть ли способ настроить маршруты, чтобы мне не приходилось вручную вводить все остальные действия (MapRoute " items / create " items / delete " и т. д.) вручную в Global. asax.cs? По сути, я хотел бы иметь второй маршрут, как:
routes.MapRoute("Q2", "questions/{action}",
new { controller = "Questions", action = "Index" });
... и заставить механизм маршрутизации использовать маршрут Q1, если {id}
соответствует целому числу, и {action}
, если это строка. Это возможно?
Решение
Если вы наложите ограничение маршрута на первое, чтобы поле id могло быть только целым числом, то я считаю, что любые другие действия будут выполнены по умолчанию.
routes.MapRoute("Q1",
"questions/{id}",
new {controller = "Questions", action = "Details"},
new { id=@"\d+" });
Все остальное должно обрабатываться маршрутом по умолчанию. Итак, "questions / 3553" ударил бы это, но " вопросы / спросить не будет соответствовать. Возможно, вы захотите сначала указать более конкретный маршрут в файле Global.asax.cs.