C# Response.redirect不保留HttpContext.Current.Items
我正在学习C# Response.redirect不保留HttpContext.Current.Items,c#,asp.net,webforms,C#,Asp.net,Webforms,我正在学习HttpContext,发现 HttpContext对象将为每个给定的请求重新构造 到ASP.Net应用程序 现在,考虑一个案例,当我有两页的时候。WebForm1和Webform2。在Form1中,我正在编写下面提到的代码并重定向到form2 HttpContext.Current.Items.Add("Key", "Value"); 查询 当我使用Server.Transfer时,此密钥将持久存在,而在使用Response.Redirect时情况并非如此 混乱 如果从未生成新请求
HttpContext
,发现
HttpContext对象将为每个给定的请求重新构造
到ASP.Net应用程序
现在,考虑一个案例,当我有两页的时候。WebForm1和Webform2。在Form1中,我正在编写下面提到的代码并重定向到form2
HttpContext.Current.Items.Add("Key", "Value");
查询
当我使用Server.Transfer时,此密钥将持久存在,而在使用Response.Redirect时情况并非如此
混乱
如果从未生成新请求,则会创建HttpCopntext对象。此外,会话被保留。这是HttpContext的一部分
HttpContext.Current.Session
如果会话可以持续,为什么不能在
响应.重定向中HttpContext.Current.Items
?重定向生成一个新的HttpContext
,这就是其中的项目丢失的原因-重定向有效地告诉浏览器下一个请求的URL,当它这样做时,它会丢失触发重定向的前一个请求的上下文
会话在请求之间持续存在(通常使用sessionID cookie将用户绑定到服务器上的值),因此仍然可用。重定向生成一个新的HttpContext
,这就是其中的项目丢失的原因-重定向有效地告诉浏览器要请求的下一个URL,当它这样做时,它会丢失触发重定向的前一个请求的上下文
会话在请求之间持续存在(通常使用sessionID cookie将用户绑定到服务器上的值),因此仍然可用。我建议您查看System.Web.dll
,尤其是在getterHttpContext.Items[“AspSession”中使用的属性HttpContext.session
和at方法SessionStateModule.InitStateStoreItem(…)
(在该getter中调用),该方法调用SessionStateUtility.AddHttpSessionStateToContext(…)
。您可以看到,HttpSessionState集合的内容存储在SessionStateStoreProviderBase
implemented(InProc,Sql)对象中的请求之间,一个词中更深入。而HttpContext.Items
哈希表在第一次get时初始化,在请求之间消失。我建议您查看System.Web.dll
,尤其是在getterHttpContext.Items[“AspSession”中使用的属性HttpContext.Session
和at方法SessionStateModule.InitStateStoreItem(…)
(在该getter中调用),该方法调用SessionStateUtility.AddHttpSessionStateToContext(…)
。您可以看到,HttpSessionState集合的内容存储在SessionStateStoreProviderBase
implemented(InProc,Sql)对象中的请求之间,一个词中更深入。而HttpContext.Items
hashtable在第一次获取时初始化,在请求之间终止。HttpContext.Current.Session
保持,而HttpContext.cutent.Items
不保持。为什么?因为第一个是设计为跨请求持久化的,而第二个不是。我的意思是,哪些东西包含会话
而不包含项?HttpContext.Current.Session
持久化和HttpContext.cutent.Items
不。为什么?因为第一个是设计为跨请求持久化的,而第二个不是。我的意思是,哪些东西包含会话,哪些东西不包含项?请参阅