2009-07-23 45 views
23

有什么方法可以指定给定的控制器或操作以只读方式使用会话状态吗?在“旧的”ASP.NET中,我们曾经这样做过:指定ASP.NET MVC中的只读会话

<%@ Page EnableSessionState="ReadOnly" %> 

是否存在ASP.NET MVC等效项?我希望允许我的应用程序同时处理来自同一客户端的多个请求,并且完全关闭会话在我的情况中不是一个选项。

+0

可能重复的[禁用会话状态每个请求在ASP.Net MVC(http://stackoverflow.com/questions/1464203/disable-session-state-per-request-in-asp -net-mvc) – Liam 2013-12-12 11:48:59

回答

8

类似的问题在这里问:Disable Session state per-request in ASP.Net MVC

接受的答案涉及创建自定义的路由处理,最终跳过绑定到会话。这并不完全回答你的问题(这是如何声明多个操作来使用只读会话访问),但它似乎足以提及。

1

这可能有点棘手 - 我的理解是设置会话状态是发生在IHttpHandler级别的事情。通过自定义处理程序,您可以使用标记接口来指定会话状态,如IReadOnlySessionState声明它只需要只读会话状态。您可以尝试将其附加到您的控制器并查看它是如何飞行的。我怀疑它不会因为ASP.NET mvc控制器在IHttpHandler连线后发生,但它值得一试。

另一种解决方案可能是将会话状态变量包装在您自己的类中,并公开一个只读版本以强制只读。在多个请求中访问它不应该是一个问题,但是如果您开始尝试从多个角度写入相同的会话变量,则可以获得竞争条件等。

+0

目标不是让变量只读,目标是允许来自单个客户端的多个同时请求MVC页面。将会话变量包装在只读包装器中将无济于事。 – Mark 2009-07-27 16:57:46

+0

我想我并不完全关注你 - 那么为什么ReadOnly很重要,如果不是为了避免竞争条件的时候可以同时更新?如果你的所有页面只是读会话数据,那么同时发送请求不会受到影响。如果您的所有页面都需要同时更新会话,那么将内容封装为ReadOnly不会起作用。 – 2009-07-27 17:50:19

-2

如何在您的模型中将您想要成为“只读”的数据设置为静态?通过这种方式,您可以同时向MVC请求相同的数据。