作为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 }
);
但我会对calendar
做些什么?我在哪里拿起所以我可以转换为ID,这样查询数据库会更快
我有点迷失在这里:(
答案 0 :(得分:1)
首先,即使将日历ID“隐藏”在字符串后面,仍然没有什么可以阻止用户尝试猜测适当的ID。无论您使用何种解决方案,都需要在操作中内置安全性,以确保仅向授权用户显示相应的数据。
要获取日历 - 只需将字符串值传递给您的操作方法并在那里解码。
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
...
}