ASP.NET MVC用户路由就像在StackOverflow中那样?

时间:2010-06-08 19:24:57

标签: asp.net-mvc routing

我已经查看了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} _
    )

2 个答案:

答案 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" }
);