我已经查看了StackOverflow上的路由,并且我有一个非常noobie的问题,但是我想澄清一些事情。
我正在专门研究用户控制器
https://stackoverflow.com/Users
https://stackoverflow.com/Users/Login
https://stackoverflow.com/Users/124069/rockinthesixstring
我注意到有一个“用户”控制器可能具有默认的“索引”操作和“登录”操作。我面临的问题是可以忽略登录操作,也可以使用“UrlParameter.Optional [ID]”。
这在RegisterRoutes系列中的确切外观如何?或者我错过了一些完全明显的东西?
编辑:这是我目前的路线......但它肯定远非正确。 routes.MapRoute( _
"Default", _
"{controller}/{id}/{slug}", _
New With {.controller = "Events", .action = "Index", .id = UrlParameter.Optional, .slug = UrlParameter.Optional} _
)
答案 0 :(得分:5)
可能只是使用一个特定的路由来处理它,也使用正则表达式来指定ID的格式(因此它不会与在该位置包含动作名称的其他路由混淆)。
// 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}
);
答案 1 :(得分:1)
如果没有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" }
);