【问题标题】:TempData /Session in MVC4 / IIS6 not returning stored valuesMVC4 / IIS6 中的 TempData /Session 不返回存储的值
【发布时间】:2012-07-25 00:11:34
【问题描述】:

真的在为 MVC / TempData / Session / 可能是 IIS6 类型的问题而苦苦挣扎。

我有一个简单的 MVC 网站 - 主控制器如下所示:

public class DemoController : Controller
{
    [HttpPost]
    public RedirectToRouteResult Index(SomeObject obj)
    {
        _someService.DoStuffWith(obj);

        TempData.Add("SomeObject", obj);

        return RedirectToAction("Index");
    }

    [HttpGet]
    public ViewResult Index()
    {
        var obj = TempData.Peek("SomeObject") as SomeObject;

        return View("Hello", obj);
    }
}

所以这是一个超级简单的 Post Redirect Get - 从某个地方提交数据,在 Post-friendly 操作中获取它,用它做一些事情,将它插入临时数据,重定向到 Get-friendly,再次获取它,将用户粘在模型中的对象的新视图上。之前已经实现了十几次,从来没有出现过问题,但它一直在 IIS7 上。

在 cassini 和本地 IIS 7.5 上本地运行时,这完全符合预期。但是,一旦我部署到 Server 2003 和 IIS6,当我第一次尝试访问视图中“SomeObject”模型的任何属性时,我就会得到一个空引用异常。

那么,我还尝试了什么:

  • 我已经放弃了 TempData,只是将其推送到 Session["Whatever"] - 结果相同
  • 我已推送到 HttpContext.Current.Session["Whatever"] - 结果相同
  • 我已推送到 ControllerContext.HttpContext.Session["Whatever"] - 结果相同

(诚然,我对它们之间的区别很粗略 - 以前从来不需要担心)

  • 我已确保会话状态已在 IIS 上打开。
  • 我检查了 Asp.net 会话标识符在请求之间没有变化。
  • 我已部署到 2 个单独的服务器,均运行 2003 和 IIS6,两者的结果相同
  • 明确使用 SessionStateBehaviour.Required

我不能做什么:

  • 部署到本地计算机之外的 IIS7
  • 使用 SqlServer SessionState
  • 使用 StateServer SessionState

另外值得一提的是,该站点正在使用 MVC4 RC - 尽管该站点的此特定部分未使用 RC 功能。

欢迎任何想法或cmets!

谢谢。

【问题讨论】:

  • 欢迎来到 Session 地狱 :-) 自从我停止在我的应用程序中使用 Sessions 后,我觉得我在天堂。
  • 您是否尝试过仅对临时数据使用索引器?例如
  • 是的 - 已经尝试了将东西放入和取出 tempdata 的所有可用排列 - 所有结果都完全相同......

标签: asp.net-mvc session iis asp.net-mvc-4


【解决方案1】:

我的问题是我在 web.config 文件中设置了这个,但没有使用 SSL:

<httpCookies requireSSL="true" />

此设置可防止 cookie 通过不安全(即非 SSL)连接工作 - 包括 ASP.NET 会话 cookie。

【讨论】:

    【解决方案2】:

    这是我系统上的问题 - 我的服务器名称包含下划线。 RFC 952 不允许在主机名中使用下划线,这可能会干扰设置 cookie 并因此保持会话的能力。

    为了追踪这一点,我开始查看每个控制器部分中的 SessionID,并注意到它在每一篇文章中都在变化。这只发生在我们的测试服务器上,因为我们用 _t 命名它以表明它是一台测试机器。哎哟!

    我找到了this point

    这可能会提供其他价值。

    希望对你有帮助

    大卫

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 2012-03-31
      • 2012-10-11
      • 2015-11-09
      • 2017-07-12
      相关资源
      最近更新 更多