'全球'状态和ASP.NET MVC

时间:2010-03-09 21:50:01

标签: asp.net-mvc

我正在学习ASP.NET MVC作为非Web开发人员。我正在努力找到一个最适合用于应用程序的习惯用法,该应用程序的概念是选择一个“项目”来处理影响所有其他页面的第一页。

似乎有三种选择:

  • 只需将信息置于会话状态即可。工作正常,但不是很MVC-ish
  • 将状态嵌入所有网址...所以不是/ Products / Details / 1而是URL /(/ project_id)/ Products / Details / 1
  • 为此信息设置单独的Cookie

由于应用程序中的几乎所有URL都需要当前项目,这似乎有点过分,并且使构建任何视图中使用的URL更加有效。它还需要我验证每次调用的权限,因为用户可以轻松修改它。

关于最佳方法的任何建议 - 使用会话这么糟糕的主意?!

2 个答案:

答案 0 :(得分:2)

你的选择2是我的选择 所以代替/ Products / 1 / Details
我会把它变成Project / 1 / Products / 1 / Details

它更符合REST。它几乎与MVC无关,但是如果你希望你的路由和URL像REST中的资源那样读取,你会希望url在斜杠处崩溃并进行状态。其他方法是在cookie中标记项目ID,但这会导致链接,因此当有人离开并返回时,它们会被放回去。

会话也很难测试你是​​否直接将自己绑定到这个概念。

答案 1 :(得分:1)

就个人而言,我只会使用会话。真的没有关于会话的非MVCish - 认为它只是你的模型的一部分。

使用cookie与使用会话没什么不同。将它嵌入到URL中并不是一个糟糕的选择,特别是对于“可链接性”,如果这是您的项目的一个问题。但它的副作用是混乱网址,并要求你不断地在页面之间传递该ID。