Подтвердить что ты не робот

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} _
    )
4b9b3361

Ответ 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" }
);