2012-06-01 39 views
0

框架:ASP.Net MVC 3試圖找出一種優雅的方式在ASP.NET MVC請求管道中持久對象之間的數據

當一個請求到來時,我攔截通過一個全球性的過濾器的請求,並執行一個數據庫根據子域查找。來自數據庫查找的返回int需要被持久化到其他對象(即控制器),以便在需要數據時不需要再次執行數據庫命中。

我一直希望避免使用cookies,因爲這些信息是系統的相關部分,我不想依賴啓用cookies。

我已閱讀並未提供任何良好答案的相關問題herehere

其實我有兩個問題:

  1. 截至目前,我想出了一個子域管理員對象,它確實繁重,並通過我的IoC有管理的對象是HTTP請求範圍,我可以搶該管理人員可以在請求期間隨時解決問題。

    有沒有更好的方法在MVC請求管道中的不同對象上傳輸此信息後,我已經查找它? - 我已經檢查了將信息以某種方式放回請求中的想法(涉及問題#2)。

  2. 如果您要使用請求來存儲數據(即攔截請求,執行查找,寫入請求),那麼這將是保存該信息的合理位置?

    我回顧了會話,但這似乎與Web服務器配置會話的方式密切相關,我已經提到過我不想使用Cookie。由於安全原因,其他區域(如發佈數據和查詢字符串集合)被鎖定。

有什麼建議嗎?

+0

爲什麼不[Memcached的(http://stackoverflow.com/questions/351635/memcached-with-windows-and-net)?這就是我所使用的,它的速度,可靠性和超級容易發展。 – balexandre

+0

那麼,如果不是會話,那麼有[緩存,看看這裏的答案](http://stackoverflow.com/a/343935/1180426)..? –

回答

1

1非常接近。

你的SubDomain管理器可能可能是一個單身人士(也許使用你的IOC容器),一旦數據被初始加載後,用一個簡單的靜態字典來查找一個子域。如果您擔心在不執行數據加載多次的情況下發生這種初始加載並在多個服務器間進行同步,您可以查看分佈式緩存(appfabric,ncache,memcache),具體取決於進行數據庫調用的開銷。

但是我不會使用HttpContext.Item來存儲標識。我會用你的IOC容器把它注入你的控制器(可能是注入屬性)。使用大多數IOC容器,您應該能夠在HttpRequest的開始和「用戶會話/事務」的生命週期持續發生這種情況。

NHibernate的挖洞讓這一切得以實施,從而輕鬆地將它的可笑http://nhforge.org/wikis/burrow/default.aspx

+0

利用字典並將經理設置爲單身人士的好主意。我目前正在使用NH,我必須看看Burrow .. – pghtech

2

我認爲你的第一個方法與IoC容器和http請求範圍是很好的去。

對於第二個問題:正確的地方是HttpContext.Items商店,它存儲當前請求生存期的關鍵值對。

相關問題