繁体   English   中英

试图找出一种优雅的方式在ASP.NET MVC请求管道中的对象之间持久保存数据

[英]Trying to figure out an elegant way to persist data between objects in ASP.NET MVC Request Pipeline

框架:ASP.Net MVC 3

收到请求时,我正在通过全局过滤器拦截该请求,并根据子域执行数据库查找。 从数据库查找返回的int必须保留到其他对象(即Controllers),以便在需要该数据时不需要再次执行数据库命中。

我希望避免使用cookie,因为此信息是系统的相关部分,并且我不想依赖于启用cookie。

我在这里这里已经阅读了相关的问题,但是并没有提供任何好的答案。

我实际上有两个问题:

  1. 到目前为止,我已经提出了一个Subdomain管理器对象,该对象很繁重,并且通过我的IoC使该管理器对象的作用域为HTTP请求,并且我可以在请求期间的任何时间抓住该管理器作为可能的解决方案。

    在查找之后,是否有更好的方法可以在MVC请求管道中的不同对象之间传递此信息? -我研究了将信息以某种方式重新放入请求的想法(与问题2有关)。

  2. 如果要使用“请求”存储数据(即拦截请求,执行查找,写入请求),那么存放该信息的逻辑位置在哪里?

    我查看了会话,但这似乎与为会话配置Web服务器的方式紧密相关,我已经提到我不想使用cookie。 由于安全原因,其他区域(例如发布数据和查询字符串集合)被锁定。

有什么建议么?

我认为使用IoC容器和http请求范围的第一种方法很好。

对于第二个问题:正确的位置将是HttpContext.Items存储区,该存储区在当前请求的生存HttpContext.Items存储键值对。

1非常接近。

您的SubDomain管理器可能是一个单例(也许使用您的IOC容器),带有一个简单的静态Dictionary,用于在初始加载数据后查找子域。 如果您担心会发生这种初始加载并在多个服务器之间进行同步而又不执行多次数据加载,则可以根据进行数据库调用的开销查看分布式缓存(appfabric,ncache,memcache)。

我不会使用HttpContext.Item来存储ID。 我将使用您的IOC容器将其注入到您的控制器中(可能是属性注入)。 使用大多数IOC容器,您应该能够在HttpRequest的开始时触发这种情况,并持续“ User Session / Transaction”的生命周期。

NHibernate Burrows允许轻松实现所有这些功能,这很可笑http://nhforge.org/wikis/burrow/default.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM