MVC 会话变量在 Localhost 上工作但不在实时服务器上工作?
MVC Session Variable working on Localhost but not on live server?
在我的 MVC5 应用程序中,我有一个数据网格,它在 URL 中指定了 filter/sort 标准。当用户选择 Edit/Create/Delete 的记录时,我需要保存 URL 值,以便当控制器 POST 操作完成时,它们将返回到与之前完全相同的布局触发了 GET 操作(应用了 sort/filter 标准的相同数据网格)。
为了追求这种功能,我开始在控制器中使用会话变量。在 GET 上:
Session["returnURL"] = Request.UrlReferrer.AbsoluteUri;
我将 returnURL
的会话变量设置为我浏览器的当前完整路径 URL。在 post 上,保存对 record/database 的更改后,我检查了 returnURL
变量是否为空并执行 Redirect()
:
var returnURL = (Session["returnURL"] != null) ? Session["returnURL"].ToString() : Url.Action("Index", "Home");
return Redirect(returnURL);
这一切在我的 localhost
上运行得非常好,但是当我每次尝试导航到 Edit/Create/Delete 操作记录时将它发布到我的服务器时,GET 操作上的会话变量原因:
“/”应用程序中的服务器错误。
你调用的对象是空的。
说明:在执行当前 Web 请求期间发生未处理的异常。
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
来源错误:[没有相关的来源行]
经过大量试验和错误后,我诊断出是我的会话变量导致了这个 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">
.
我在这个 post (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>
我仍然不完全确定为什么这是答案,但在这种情况下它对我的问题有效。
在我的 MVC5 应用程序中,我有一个数据网格,它在 URL 中指定了 filter/sort 标准。当用户选择 Edit/Create/Delete 的记录时,我需要保存 URL 值,以便当控制器 POST 操作完成时,它们将返回到与之前完全相同的布局触发了 GET 操作(应用了 sort/filter 标准的相同数据网格)。
为了追求这种功能,我开始在控制器中使用会话变量。在 GET 上:
Session["returnURL"] = Request.UrlReferrer.AbsoluteUri;
我将 returnURL
的会话变量设置为我浏览器的当前完整路径 URL。在 post 上,保存对 record/database 的更改后,我检查了 returnURL
变量是否为空并执行 Redirect()
:
var returnURL = (Session["returnURL"] != null) ? Session["returnURL"].ToString() : Url.Action("Index", "Home");
return Redirect(returnURL);
这一切在我的 localhost
上运行得非常好,但是当我每次尝试导航到 Edit/Create/Delete 操作记录时将它发布到我的服务器时,GET 操作上的会话变量原因:
“/”应用程序中的服务器错误。 你调用的对象是空的。 说明:在执行当前 Web 请求期间发生未处理的异常。 异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。 来源错误:[没有相关的来源行]
经过大量试验和错误后,我诊断出是我的会话变量导致了这个 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">
.
我在这个 post (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>
我仍然不完全确定为什么这是答案,但在这种情况下它对我的问题有效。