Подтвердить что ты не робот

Кэширование данных по запросу в приложении Owin

В традиционных приложениях ASP.NET(которые используют System.Web) я могу кэшировать данные в

HttpContext.Current.Items 

Теперь в Owin HttpContext больше не доступен. Есть ли способ сделать аналогичную вещь в Owin - метод static , через который я могу установить/получить для каждого запроса?

Этот question дал некоторые подсказки, но не нашел точного решения в моем случае.

4b9b3361

Ответ 1

Наконец, я нашел OwinRequestScopeContext. Очень прост в использовании.

В классе Startup:

app.UseRequestScopeContext();

Затем я могу добавить кэш запросов следующим образом:

OwinRequestScopeContext.Current.Items["myclient"] = new Client();

Тогда где-нибудь в моем коде я могу сделать (как HttpContext.Current):

var currentClient = OwinRequestScopeContext.Current.Items["myclient"] as Client;

Здесь является исходным кодом, если вам интересно. Он использует CallContext.LogicalGetData и LogicalSetData. Кто-нибудь видит какие-либо проблемы с этим подходом к кэшированию данных запроса?

Ответ 2

Вам просто нужно использовать OwinContext для этого:

От вашего промежуточного программного обеспечения:

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);     
   }   
}

Из MVC или WebApi:

Request.GetOwinContext().Get<string>("Hello");