2013-06-23 28 views
9

假设有一个HttpHandler处理每个请求,并假设每个HttpHandler计算每个请求的中间结果,并且可能希望将其传递给页面处理程序,例如通过Server.Transfer或Server.Execute通过HttpContext.Items集合请求之间是否HttpContext.Current.Items是线程安全的?

当每个请求到达相同的.aspx页面时,每个请求是否都有单独的HttpContext.Items [“sameKey”]副本?

我关注源于事实HttpContext.Current本身就是一个静态属性

回答

9

的HttpContext封装有关个别HTTP请求 所有HTTP特定的信息。

因此,每个请求HttpContext.Items [“sameKey”]将是不同的副本。

2

HttpContext.Items是无状态的“共享”请求之间的会话或更高级别的状态(数据库)

+0

在这种情况下,唯一的办法,在技术上是不是这个同样的请求仍,从浏览器的点?因为这是Server.Transfer,而不是Response.Redirect ...所以技术上不是它仍然是相同的HTTP请求? – blue18hutthutt

+0

它并不重要,每个Server.transfer将有不同的项目;尽管它是静态的,但它依赖于线程上下文(每个请求都将其Items保存在自己的Thread上下文中) –