环境:
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了。