Asp.net mvc 2 我们如何路由像{calendar}/{controller}/{action}/{id}这样的东西

Asp.net mvc 2 我们如何路由像{calendar}/{controller}/{action}/{id}这样的东西,asp.net-mvc-2,routing,asp.net-mvc-routing,Asp.net Mvc 2,Routing,Asp.net Mvc Routing,作为一名MVC初学者,我正试图找出实现路线的最佳方法,以满足我的需要,我一点运气都没有,所以我很乐意寻求任何帮助 我的webApp由日历驱动,每个日历都有一系列操作 订阅 编辑日历 观看获奖者 每日挑战 等等 我想避免像这样的传球 mydomain.com/calendar/2 我的想法是隐藏ID,这样就没有人可以从逻辑上访问其他日历了 mydomain.com/q2tsT 其中,q2tsT可以是一个10字符的随机生成字符串,然后我希望有一些路由,例如: mydomain.com/q2t

作为一名MVC初学者,我正试图找出实现路线的最佳方法,以满足我的需要,我一点运气都没有,所以我很乐意寻求任何帮助

我的webApp由日历驱动,每个日历都有一系列操作

  • 订阅
  • 编辑日历
  • 观看获奖者
  • 每日挑战
  • 等等
我想避免像这样的传球

mydomain.com/calendar/2
我的想法是隐藏
ID
,这样就没有人可以从逻辑上访问其他日历了

mydomain.com/q2tsT
其中,
q2tsT
可以是一个10字符的随机生成字符串,然后我希望有一些路由,例如:

mydomain.com/q2tsT/subscribe
mydomain.com/q2tsT/daily-challenge
mydomain.com/q2tsT/winners
mydomain.com/q2tsT/prizes
我将如何设置我的路线以执行这样的操作

比如:

routes.MapRoute(
    "CalendarRoute",
    "{calendar}/{controller}/{action}/{id}",
    new { 
        calendar = "Empty", 
        controller = "Frontend", 
        action = "Index", 
        id = UrlParameter.Optional }
);
但是我将如何处理
日历
?我在哪里取它,这样我可以转换成一个ID,这样查询数据库会更快


我有点迷路了:(

首先,即使将日历ID“隐藏”在字符串后面,也无法阻止用户尝试猜测适当的ID。无论您使用什么解决方案,都需要在操作中内置安全性,以确保只向授权用户显示适当的数据

要获取日历,只需将字符串值传递到action方法中并在那里对其进行解码

routes.MapRoute(
    "CalendarRoute",
    "{calendar}/{controller}/{action}/{id}",
    new { 
        calendar = "Empty", 
        controller = "Frontend", 
        action = "Index", 
        id = UrlParameter.Optional }
);

public ActionResult Index(string calendar, int? id) {
   // decode the calendar into something useful
...    
}

是的,我确实意识到了这一点,但是对于一个10个随机字符的字符串来说,一个数字值要难一点,而这正是我想要实现的。谢谢你的提醒,效果很好!