Data caching per request in Owin application

In traditional ASP.NET applications (that use System.Web), I’m able to cache data in


Now in Owin the HttpContext is not available anymore. Is there a way to do the similar thing in Owin – a static method/property through which I can set/get per request data?

This question gave some hints but not exact a solution in my case.


Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Finally I found OwinRequestScopeContext. Very simple to use.

In the Startup class:


Then I can add per request cache like this:
OwinRequestScopeContext.Current.Items["myclient"] = new Client();

Then anywhere in my code I can do (just like HttpContext.Current):
var currentClient = OwinRequestScopeContext.Current.Items["myclient"] as Client;

Here is the source code if you’re curious. It uses CallContext.LogicalGetData and LogicalSetData. Does any one see any problem with this approach of caching request data?

Method 2

You just need to use OwinContext for this:

From your middleware:

public class HelloWorldMiddleware : OwinMiddleware
   public HelloWorldMiddleware (OwinMiddleware next) : base(next) { }

   public override async Task Invoke(IOwinContext context)
       context.Set("Hello", "World");
       await Next.Invoke(context);     

From MVC or WebApi:

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Notify of

Inline Feedbacks
View all comments
Would love your thoughts, please comment.x