框架:ASP.Net MVC 3
当请求进入时,我通过全局过滤器拦截请求并根据子域执行数据库查找。 DB查找中的返回int需要持久保存到其他对象(即控制器),以便在需要该数据时不需要再次执行DB命中。
我希望避免使用cookie,因为这些信息是系统的一个相关部分,我不想依赖于启用cookie。
我实际上有两个问题:
截至目前,我已经提出了一个子域管理器对象来完成繁重工作,通过我的IoC,管理器对象是HTTP请求作用域,我可以在请求期间随时抓取该管理器作为可能的解决方案。
在我查找之后,是否有更好的方法在MVC请求管道中的不同对象之间传递此信息? - 我已经检查过以某种方式将信息反馈到请求中的想法(与问题#2有关)。
如果您要使用请求来存储数据(即拦截请求,执行查找,写入请求)哪里是保存该信息的逻辑位置?
我查看了会话,但这似乎与为会话配置Web服务器的方式密切相关,我已经提到过我不想使用cookie。其他区域(如发布数据和查询字符串集合)因安全原因而被锁定。
有什么建议吗?
答案 0 :(得分:2)
我认为你的第一个方法是使用IoC容器和http请求范围。
对于您的第二个问题:正确的位置是HttpContext.Items
商店,它存储当前请求生命周期的键值对。
答案 1 :(得分:1)
1非常接近。
你的SubDomain管理器可能是一个单例(也许使用你的IOC容器),有一个简单的静态字典,用于在最初加载数据后查找子域。如果您担心发生这种初始加载并在多个服务器之间同步而不多次执行数据加载,则可以查看分布式缓存(appfabric,ncache,memcache),具体取决于进行数据库调用的开销。
我不会使用HttpContext.Item来存储Id。我会使用你的IOC容器将它注入你的控制器(可能是属性注入)。使用大多数IOC容器,你应该能够在HttpRequest的开始时触发它,并持续“用户会话/事务”的生命周期。
NHibernate Burrows允许所有这些很容易实现它是可笑的http://nhforge.org/wikis/burrow/default.aspx