Asp.net mvc 在ASP.NET MVC中指定只读会话

Asp.net mvc 在ASP.NET MVC中指定只读会话,asp.net-mvc,session,Asp.net Mvc,Session,有没有办法指定给定的控制器或操作以只读方式使用会话状态?在“旧”ASP.NET中,我们通常执行以下操作: <%@ Page EnableSessionState="ReadOnly" %> 是否有与ASP.NET MVC相当的版本?我希望允许我的应用程序同时处理来自同一客户机的多个请求,而完全关闭会话在我的情况下不是一个选项。这可能有点棘手——我的理解是设置会话状态是在IHttpHandler级别发生的事情。对于自定义处理程序,您可以通过使用标记接口(如IReadOnlySes

有没有办法指定给定的控制器或操作以只读方式使用会话状态?在“旧”ASP.NET中,我们通常执行以下操作:

<%@ Page EnableSessionState="ReadOnly" %>


是否有与ASP.NET MVC相当的版本?我希望允许我的应用程序同时处理来自同一客户机的多个请求,而完全关闭会话在我的情况下不是一个选项。

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


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

在您的模型中将您想要的数据设置为“只读”静态怎么样?通过这种方式,您可以使用相同的数据同时请求MVC

这里也提出了类似的问题:


公认的答案是创建一个自定义路由处理程序,最终跳过与会话的绑定。这并不能完全回答您的问题(即如何声明多个操作以使用只读会话访问),但似乎值得一提。

在Asp.Net MVC3中,现在有一个
SessionStateAttribute
,您可以用它装饰控制器,强制所有操作进入读写、只读或无会话模式


我们的目标不是将变量设置为只读,而是允许从单个客户端同时向MVC页面发出多个请求。将会话变量包装在只读包装器中不会有帮助。我想我没有完全理解您的意思——如果不避免竞争条件,同时可能会有更新,为什么只读很重要?如果您的所有页面都只是读取会话数据,那么同时请求不会有什么坏处。如果您的所有页面都需要同时更新会话,那么将内容包装为只读将没有帮助。只读很重要,因为ASP.NET运行时不允许来自同一客户端的多个请求,除非指定了只读会话。除非我指定只读会话,否则我不能同时请求,问题是如何在ASP.NET MVC中实现这一点。线程问题不是我要解决的问题,问题是ASP.NET不会让一个web应用程序同时处理来自同一客户机的多个请求,除非它认为会话状态已关闭,或者处理请求的特定处理程序不会修改会话状态。将模型中的字段设置为静态不会通知ASP.NET会话状态为只读。会话状态可能重复