ASP.NET MVC Пользовательская маршрутизация как в StackOverflow?
Я просмотрел маршрутизацию на StackOverflow, и у меня есть очень нубийский вопрос, но что-то, что я хотел бы прояснить, тем не менее.
Я смотрю конкретно на контроллер пользователей
https://stackoverflow.com/Users
https://stackoverflow.com/Users/Login
https://stackoverflow.com/Users/124069/rockinthesixstring
Что я замечаю, так это то, что есть контроллер "Пользователи", вероятно, с действием "Индекс" по умолчанию и действием "Вход". Проблема, с которой я сталкиваюсь, заключается в том, что действие входа может быть проигнорировано и может использоваться "UrlParameter.Optional [ID]".
Как именно это выглядит в коллекции RegisterRoutes? Или я пропущу что-то совершенно очевидное?
EDIT: Здесь маршрут, который у меня есть в настоящее время, но он определенно далек от права.
routes.MapRoute( _
"Default", _
"{controller}/{id}/{slug}", _
New With {.controller = "Events", .action = "Index", .id = UrlParameter.Optional, .slug = UrlParameter.Optional} _
)
Ответы
Ответ 1
Вероятно, просто используется конкретный маршрут для его обработки, а также с помощью регулярного выражения для указания формата идентификатора (поэтому он не путается с другими маршрутами, которые будут содержать имена действий в этой позиции).
// one route for details
routes.MapRoute("UserProfile",
"Users/{id}/{slug}",
new { controller = "Users", action = "Details", slug = string.Empty },
new { id = @"\d+" }
);
// one route for everything else
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional}
);
Ответ 2
Без разработчика SO, дающего определенный ответ, обратная инженерия может дать много возможных комбинаций и перестановок. Здесь тот, который, я думаю, тоже подойдет:
routes.MapRoute(
"UserProfile",
"Users/{id}/{slug}",
new { controller = "Users", action = "Profile" }
);
routes.MapRoute(
"UserLogin",
"Users/Login",
new { controller = "Users", action = "Login" }
);
routes.MapRoute(
"DefaultUser",
"Users",
new { controller = "Users", action = "Index" }
);