環境:
Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0
一. 在Asp.Net Mvc應用程序中禁用SessionState
在Asp.Net Mvc: 淺析TempData機制一文中,我們簡單探討了Asp.Net Mvc中TempData的實現機制,由 此得知默認情況下,TempData的DataProvider實現為基於Session的存儲方式。
采用Session作為默認的數據存儲方式,原本合情合理,只是,有時候,我們的網站中卻不允許使用 Session,需要禁用這家伙,如果這時候你只是簡單的在Web.config中加上SessionState的禁用配置,就 OK了嗎?當然不是!
來看看情況吧:
給Web.config加上<sessionState mode="Off" />,然後運行程序,頁面上馬上會報告一個異常 :
原因很簡單,根據前文分析,無論如何,每次Action執行的時候都會Load和Save TempData,而此時如 果我們禁用了Session,那麼就必然出現上述異常。
那現在怎麼辦呢?其實,我甚至都不想在我的應用程序中使用TempData,我只是想禁用SessionState ,然道,我要為此去實現另外一套TempDataProvider嗎?代價是不是太高了?剛才說了,其實我壓根兒都 不想使用TempData,那麼我為何不干脆實現一個啥事也不干的TempDataProvider得了。
二. 自定義一個NullTempDataProvider
嗯,現在就來寫一個啥事也不干的TempDataProvider:
正如你看到的,NullTempDataProvider確實啥也沒干,就是說,你寫了貌似TempData["name"] = "Tristan"之類的語句等於白寫,但前面說了,我不用TempData,所以,是可以接受的。
好了,替代品寫好了,現在就要考慮怎麼替代掉那個默認的SessionTempDataProvider了。