【问题标题】:SaveTempData called even though session is disabled即使会话被禁用,也会调用 SaveTempData
【发布时间】:2011-07-27 22:49:28
【问题描述】:

我已经通过 web.config 在我的 mvc2 应用程序中禁用了 sessionState,并且还创建了我自己的 controllerfactory 和虚拟临时数据提供程序,如下所述:

How can I disable session state in ASP.NET MVC?

只有我做到了,SaveTempData 会抛出异常:

 public void SaveTempData(ControllerContext controllerContext, 
                          IDictionary<string, object> values)
    {
        throw new NotImplementedException(
        "Cannot set tempdata, no session state is available.");
    }

我已确保没有代码使用过 Session 或 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.");
        }
    }

一切都按预期工作 - 我只是希望了解为什么在我不在任何地方使用 SaveTempData 时会调用它。

更新

发现这篇文章:http://www.gregshackles.com/2010/07/asp-net-mvc-do-you-know-where-your-tempdata-is/

这解释了 ExecuteCore 围绕一个操作调用 PossiblyLoadTempData 和 PossiblySaveTempData - 这就是导致我的问题的原因。这是 mvc2 与 mvc1 的新增功能吗?

【问题讨论】:

  • 注意:AppFabric 或标准 InProc 会话状态出现此错误。原本以为是 AppFabric 造成的

标签: asp.net-mvc-2 tempdata


【解决方案1】:

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

<sessionState mode="Off" />

【讨论】:

  • 刚发现这篇文章:gregshackles.com/2010/07/… 说明是在ExecuteCore中调用的,没想到。这是 mvc2 与 mvc1 的变化吗?仅供大家参考,我确实在我的 web.config 中设置了“
【解决方案2】:

发现这篇文章:http://www.gregshackles.com/2010/07/asp-net-mvc-do-you-know-where-your-tempdata-is/

这解释了 ExecuteCore 围绕一个操作调用 PossiblyLoadTempData 和 PossiblySaveTempData - 这就是导致我的问题的原因。这是 mvc2 与 mvc1 的新增功能吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 2019-10-27
    • 1970-01-01
    • 2019-09-04
    • 2016-02-09
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多