我可以使用OwinContext在单个ASP.NET MVC5应用程序之间共享数据吗?

时间:2014-10-22 15:02:51

标签: c# asp.net-mvc owin

我希望在所有应用程序请求中共享特定的静态数据(特别是站点菜单DTO)。在旧system.web.dll天内,这会将Application_Start中的数据添加到HttpContent.Current.Application[]字典中。我确信使用Owin / OwinContext可以实现非常相似,但无法找到如何添加/访问它的简单方法。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

Microsoft.AspNet.Identity.Owin库包含类OwinContextExtensions,其中包含以下方法:

public static T Get<T>(this IOwinContext context)
{
  if (context == null)
  {
    throw new ArgumentNullException("context");
  }
  return context.Get<T>(OwinContextExtensions.GetKey(typeof(T)));    
}


public static T Set<T>(this IOwinContext context, T value)
{
  if (context == null)
  {
    throw new ArgumentNullException("context");
  }
  return context.Set<T>(OwinContextExtensions.GetKey(typeof(T)), value);
}

我很确定您可以使用它们来设置和获取存储在OwinContext中的值。请注意,上下文中存储的对象的键名是类型,因此对于集合,您应该为唯一名称创建具体类型:

public MyDictionary : Dictionary<string, int>
{
}

var myDic = new MyDictionary();

var context = HttpContext.GetOwinContext();

context.Set(myDic);

var myDic2 = context.Get<MyDictionary>();