views:

125

answers:

3

We using ASP.NET 3.5 (Controls-based approach) and need to have storage specific for one http request only.

Thread-specific cache with keys from session id won't work because threads are supposed to be pooled and therefore I have a chance to have data from some previous request in cache, which is undesirable in my case. I always need to have brand new storage for each request available through whole request.

Any ideas how to do it in ASP.NET 3.5?

UPD: I tried HttpContext.Current.Items and was getting null for items stored within the same request for some reason. Did I do something wrong?

UPD2: My mistake - found bug in my code.

A: 

How about using the Context collection. This allows data to be shared between all your controls but only lasts for the request.

Use it like this context.Items("base_url") = "default.aspx"

ggonsalv
Nice idea! Could you please point me how to do it?
Artem
Duh. Got a call.. but house9 got it on the **head**HttpContext.Items["key"] = value;or context.Items("base_url") = "default.aspx"
ggonsalv
+1  A: 

We have used HttpContext.Current.Items collection to do RequestScope caching. It works well.

Valera Kolupaev
A: 

just to clarify what ggonsalv was referring to

http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx

HttpContext.Items["key"] = value;

UPDATE: the mvc specific version

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.httpcontext(v=VS.100).aspx

house9