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