Я бы хотел, чтобы URL-адреса были еще короче, чем /{Controller}/{Action}/{Id}.
Например, мне нужно {Контроллер}/{Идентификатор}, где {Идентификатор} — это строка.
Это позволит использовать простые пути, например. Пользователи/Имя пользователя, Страницы/Имя страницы, Новости/Имя новости. Мне это нравится больше, чем требование действия /Details в URL-адресе (Users/Details/Username), что менее элегантно для конечного пользователя.
Я могу легко выполнить эту работу, настроив пользовательские маршруты для любого контроллера, для которого я хочу такой уровень простоты. Однако это вызывает головную боль при реализации других действий, таких как {Контроллер}/{Действие}, где {Действие} = 'Создать', поскольку в этом случае строка {Действие} конфликтует со строкой {Идентификатор}.
Мой вопрос: как я могу иметь «зарезервированные» слова, чтобы, если URL-адрес /News/Create, он рассматривался как действие, но если URL-адрес является чем-то другим, например. /News/A-gorilla-ate-my-thesis, то он рассматривается как идентификатор.
Я надеюсь, что смогу определить это при настройке маршрутов?
Обновлять:
Используя ответ Бена Гризуолда, я обновил маршруты ASP.NET MVC по умолчанию:
routes.MapRoute(
"CreateRoute", // route name
"{controller}/Create", // url with parameters
new { action = "Create" } // parameter defaults
);
routes.MapRoute(
"DetailsRoute", // route name
"{controller}/{id}", // url with parameters
new { action = "Details" } // parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Это работает красиво и означает, что по умолчанию страницы сведений будут использовать упрощенный URL-адрес, но я все равно смогу настроить таргетинг на конкретное действие, если захочу (обновить/удалить/подробности).
Конечно, вам нужно будет запретить зарезервированное слово «Создать» в качестве идентификатора, иначе пользователь может попытаться создать статью, например, с названием «Создать», к которой никогда не будет доступа.
Это действительно приятно. Если кто-то увидит, что с этим подходом что-то не так, отзовитесь, но пока мне он нравится.
The view 'MyStringID' or its master was not found
. - person Maksim Vi.   schedule 20.01.2015