【发布时间】:2010-11-22 06:09:53
【问题描述】:
我正在尝试实现一个与另一个站点交互的小型 ASP.NET MVC 站点。简而言之,通过 URL 中的令牌管理主站点和附属站点之间的会话。我可以指定 url 格式,但我不能删除会话令牌作为 URL 的一部分提交的要求。
我正在研究如何设置路由,我对此有一些想法。我无法决定哪个是最好的,或者是否有更好的方法来做到这一点。我的主要思路:
routes.MapRoute("Main", "{controller}/{action}/{id}/{token}");
给出像http://mysite.com/Products/Detail/5/5f1c8bbf-d4f3-41f5-ac5f-48f5644a6d0f这样的URL 优点:主要与现有的 MVC 约定进行站点导航 缺点:在支持 ID 和 Action 的默认值时增加了路由的复杂性。
routes.MapRoute("Main", "{token}/{controller}/{action}/{id}/");
给出像http://mysite.com/5f1c8bbf-d4f3-41f5-ac5f-48f5644a6d0f/Products/Detail/5这样的URL 优点:简化路由 - 仍然可以按照标准 MVC 约定应用操作/ID 默认值 缺点:非常“不像网络”的 URL。需要正则表达式来验证第一个变量是有效的 GUID/令牌,然后再转到表中的下一个路由。
想到的另一种可能性,通过会话,例如:
http://mysite.com/Home/Index?session=5f1c8bbf-d4f3-41f5-ac5f-48f5644a6d0f
与此相关的问题是我有一个从 Controller 派生的基类,所有其他安全页面都在通过该基类。 SecureController 类覆盖 Execute() 并检查从 URL 获取的令牌的有效性。两种方法(GET 和路由)似乎很容易在控制器 Execute() 函数中获取令牌,但是 GET 方法感觉有点俗气,而路由方法感觉就像是,由于缺乏更好的解释,打破了MVC 路由设计的优雅。
有没有其他人遇到过类似的问题并有什么特别的成功或困难可以分享?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-2 session routing asp.net-mvc-routing