Asp.net mvc 2 即使会话已禁用,也会调用SaveTempData

Asp.net mvc 2 即使会话已禁用,也会调用SaveTempData,asp.net-mvc-2,tempdata,Asp.net Mvc 2,Tempdata,我已通过web.config在mvc2应用程序中禁用了sessionState,并创建了自己的controllerfactory和dummy tempdata提供程序,如下所述: 只有我这样做,SaveTempData才会引发异常: public void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values)

我已通过web.config在mvc2应用程序中禁用了sessionState,并创建了自己的controllerfactory和dummy tempdata提供程序,如下所述:

只有我这样做,SaveTempData才会引发异常:

 public void SaveTempData(ControllerContext controllerContext, 
                          IDictionary<string, object> values)
    {
        throw new NotImplementedException(
        "Cannot set tempdata, no session state is available.");
    }
public void SaveTempData(ControllerContext ControllerContext,
(字典值)
{
抛出新的NotImplementedException(
“无法设置tempdata,没有可用的会话状态。”);
}
我已经确保没有任何代码使用会话或TempData对象,但我仍然看到在引发“OnResultExecuted”事件后引发此异常。我曾经在我的mvc1站点上使用过同样的模式,但从未见过例外。有什么想法吗

如果我将“SaveTempData”实现更改为:

public void SaveTempData(ControllerContext controllerContext, 
                         IDictionary<string, object> values)
    {
        if (values.Count != 0)
        {
            throw new NotImplementedException(
            "Cannot set tempdata, no session state is available.");
        }
    }
public void SaveTempData(ControllerContext ControllerContext,
(字典值)
{
如果(values.Count!=0)
{
抛出新的NotImplementedException(
“无法设置tempdata,没有可用的会话状态。”);
}
}
一切都如预期的那样工作——我只是希望了解为什么在任何地方都不使用SaveTempData时却调用它

更新

发现这篇文章:


这解释了ExecuteCore围绕一个操作调用PossiblyLoadTempData和PossiblySaveTempData,这就是导致我出现问题的原因。这是mvc2与mvc1的新添加吗?

这就是在
Controller.ExecuteCore
方法中实现它的方式。每次操作前后都会调用
LoadTempData
SaveTempData
方法,因此请确保它们不会引发异常。为了有效地禁用会话,我建议您在web.config中添加以下内容:

<sessionState mode="Off" />

发现了这篇文章:


这解释了ExecuteCore围绕一个操作调用PossiblyLoadTempData和PossiblySaveTempData,这就是导致我出现问题的原因。这是mvc2和mvc1中的新添加吗?

刚刚发现了这篇文章:这表明它是在ExecuteCore中调用的,我没有意识到这一点。这是mvc2相对于mvc1的变化吗?仅供大家参考,我的web中确实设置了“”。配置注意:我在AppFabric或标准InProc会话状态中遇到此错误。本来以为是AppFabric造成的