Data caching per request in Owin application

后端 未结 2 1446
-上瘾入骨i
-上瘾入骨i 2020-12-15 23:30

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

HttpContext.Current.Items 

Now in Owin the HttpConte

相关标签:
2条回答
  • 2020-12-16 00:22

    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:

    Request.GetOwinContext().Get<string>("Hello");
    
    0 讨论(0)
  • 2020-12-16 00:24

    Finally I found OwinRequestScopeContext. Very simple to use.

    In the Startup class:

    app.UseRequestScopeContext();
    

    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?

    0 讨论(0)
提交回复
热议问题