有没有办法指定给定的Controller或Action以只读方式使用Session状态?在“旧”ASP.NET中我们曾经做过类似的事情:
<%@ Page EnableSessionState="ReadOnly" %>
是否有ASP.NET MVC等效?我希望允许我的应用程序同时处理来自同一客户端的多个请求,完全关闭会话在我的情况下不是一个选项。
答案 0 :(得分:26)
在Asp.Net MVC3中,现在有一个SessionStateAttribute
可以装饰你的Controller,强制所有动作进入读写,只读或无会话模式。
http://msdn.microsoft.com/en-us/library/system.web.mvc.sessionstateattribute(v=VS.98).aspx
答案 1 :(得分:8)
此处提出了类似的问题:Disable Session state per-request in ASP.Net MVC
接受的答案涉及创建自定义路由处理程序,最终跳过绑定到会话。这并不完全回答你的问题(这是如何声明多个动作以使用只读会话访问),但它似乎足以提及。
答案 2 :(得分:1)
这可能有点棘手 - 我的理解是设置会话状态是在IHttpHandler级别发生的事情。使用自定义处理程序,您可以使用标记接口(如IReadOnlySessionState)指定会话状态,以声明它只需要只读会话状态。您可以尝试将其附加到您的控制器,看看它是如何飞行的。我怀疑它不会,因为在IHttpHandler接线之后,ASP.NET mvc控制器发生得很好,但值得一试。
另一个解决方案可能是将会话状态变量包装在您自己的类中,并公开一个只读版本以强制执行readonly。在多个请求中访问它应该不是问题,但如果您开始尝试从多个角度写入相同的会话变量,那么您可以获得竞争条件是正确的。
答案 3 :(得分:-2)
如何在模型中将您想要“只读”的数据设置为静态?通过这种方式,您可以使用相同的数据同时向MVC发出请求。