Мне бы хотелось, чтобы URL-адреса были даже короче, чем / enjController уговаривающихся
Например, я бы хотел {Controller} / {Id}, где {Id} - строка.
Это позволило бы использовать простые пути, например, Пользователи / Имя пользователя, Страницы / Pagename, Новости / Newsname. Мне это нравится больше, чем требование действия / Details в URL (Users / Details / Username), которое менее элегантно для конечного пользователя.
Я могу легко сделать эту работу, настроив пользовательские маршруты для любого контроллера, для которого я хочу этот уровень простоты. Однако это вызывает головную боль при реализации других действий, таких как {Controller} / {Action}, где {Action} = 'Create', поскольку в этом случае строка {Action} конфликтует со строкой {Id}.
Мой вопрос: как я могу иметь «зарезервированные» слова, чтобы, если URL был / News / Create, он обрабатывался как действие, но если URL является чем-то другим, например, / Новости / А-горилла-ели-моя-тезис, тогда это трактуется как Id.
Я надеюсь, что смогу определить это при настройке моих маршрутов?
Обновление:
Используя ответ Бена Грисволда, я обновил маршруты 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, но я все равно смогу указать конкретное действие, если захочу (обновить / удалить / подробности).
Конечно, вам нужно запретить зарезервированное слово «Создать» в качестве идентификатора, в противном случае пользователь может попытаться создать статью, например, с именем «Создать», к которой никогда нельзя получить доступ.
Это действительно мило. Если кто-то видит, что с этим подходом что-то не так, присоединяйтесь, но мне это пока нравится.