Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Response.redirect不保留HttpContext.Current.Items_C#_Asp.net_Webforms - Fatal编程技术网

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
,尤其是在getter
HttpContext.Items[“AspSession”中使用的属性
HttpContext.session
和at方法
SessionStateModule.InitStateStoreItem(…)
(在该getter中调用),该方法调用
SessionStateUtility.AddHttpSessionStateToContext(…)
。您可以看到,HttpSessionState集合的内容存储在
SessionStateStoreProviderBase
implemented(InProc,Sql)对象中的请求之间,一个词中更深入。而
HttpContext.Items
哈希表在第一次get时初始化,在请求之间消失。

我建议您查看
System.Web.dll
,尤其是在getter
HttpContext.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
不。为什么?因为第一个是设计为跨请求持久化的,而第二个不是。我的意思是,哪些东西包含会话,哪些东西不包含项?请参阅