MVC会话变量在Localhost上工作但在实时服务器上不工作?

时间:2015-07-27 16:23:58

标签: c# asp.net asp.net-mvc session session-variables

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

在我追求这种功能的过程中,我开始在Controller中使用会话变量。在GET上:

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

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

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

这一切在我的localhost上完全正常,但每当我尝试导航到我的记录的编辑/创建/删除操作时,我将其发布到我的服务器时,GET操作上的会话变量会导致:

' /'中的服务器错误应用。 你调用的对象是空的。 描述:执行当前Web请求期间发生未处理的异常。 异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。 来源错误:[没有相关的源代码行]

经过大量的试验和错误后,我诊断出我的会话变量导致了这个NullReferenceException,因为当我从GET操作方法中删除该特定代码行时,其他所有功能都正常适当的View加载。

任何人都可以帮忙吗?我不知道为什么我的会话变量在我的Localhost上运行而在我的服务器上运行。我查看了以下MSDN文章https://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.71).aspx,但即使我的<configuration><system.web> <sessionState mode="InProc"></sessionState>...中指定了Web.Config,我仍然会得到相同的结果。

修改

根据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">

1 个答案:

答案 0 :(得分:2)

我在这篇文章中找到了答案(The Session object is null in ASP.NET MVC 4 webapplication once deployed to IIS 7 (W 2008 R2)),其中我修改了<modules>部分以执行以下指定值的add/remove

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

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