MVC会话变量在本地主机上工作,但不在实时服务器上

本文关键字:服务器 工作 实时 主机 会话 变量 MVC | 更新日期: 2023-09-27 18:05:02

在我的MVC5应用程序中,我有一个数据网格,它在URL中指定了过滤/排序标准。当用户选择要编辑/创建/删除的记录时,我需要保存URL值,以便当Controller POST操作完成时,它们将返回到触发GET操作之前的完全相同的布局(应用排序/过滤条件的相同数据网格)。

为了实现这个功能,我开始在控制器中使用会话变量。得到:

Session["returnURL"] = Request.UrlReferrer.AbsoluteUri;

我将returnURL的会话变量设置为浏览器的当前完整路径URL。在帖子上,在我对记录/数据库的更改保存后,我检查了returnURL变量为null并执行Redirect():

var returnURL = (Session["returnURL"] != null) ? Session["returnURL"].ToString() : Url.Action("Index", "Home");
return Redirect(returnURL);

这一切都在我的localhost上工作得很好,但是当我每次尝试导航到编辑/创建/删除我的记录时,我将它发布到我的服务器上,GET操作上的会话变量导致:

'/'应用程序中的服务器错误。未设置为对象实例的对象引用。描述:在执行当前web请求期间发生了未处理的异常。异常详细信息:System。NullReferenceException:对象引用没有设置为对象的实例。Source Error: [No relevant Source lines]

经过大量的试验和错误后,我诊断出这是我的会话变量导致这个NullReferenceException,因为当我从我的GET动作方法中删除特定的代码行时,其他一切功能正常,适当的视图加载。

有人能帮忙吗?我不知道为什么我的会话变量在我的本地主机上工作,而不是在我的服务器上。我看了一下下面的MSDN文章https://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.71).aspx,但即使在我的Web.Config中指定了<configuration><system.web> <sessionState mode="InProc"></sessionState>...,我仍然得到相同的结果。


编辑:

在ps2goat的建议下,我修改了我的Web.Config,包括:
<system.web>
      <sessionState mode="InProc"></sessionState>
      // ....
      <pages enableSessionState="true">
        <namespaces>
          <add namespace="GridMvc" />
          <add namespace="MvcSiteMapProvider.Web.Html" />
          <add namespace="MvcSiteMapProvider.Web.Html.Models" />
        </namespaces>
      </pages>
      // ....
 </system.web>

仍然收到相同的NullReferenceException错误…?我现在已经指定了sessionState = InProc,并设置了<pages enableSessionState="true">

MVC会话变量在本地主机上工作,但不在实时服务器上

我在这篇文章中找到了答案(Session对象在ASP中为空)。. NET MVC 4 web应用程序一旦部署到IIS 7 (w2008 R2)),其中我修改了我的<modules>部分做以下指定值的add/remove:

  <configuration>
  ...
  <system.webServer>
    ...
    <modules>
      <remove name="Session" />
      <add name="Session" type="System.Web.SessionState.SessionStateModule"/>
      ...
    </modules>
  </system.webServer>
</configuration>

我仍然不完全确定为什么这是答案,但它在这种情况下对我的问题有效。