【问题标题】:OWIN equivalent to HttpContext.Application PropertyOWIN 等效于 HttpContext.Application 属性
【发布时间】:2015-07-15 16:39:52
【问题描述】:

我想找到一个等效于 HttpContext.Application 属性但使用 OWIN。我不是在 OWIN 中寻找 HttpContext 的等价物,因为我已经知道它是什么,我需要知道 Application 属性的完全等价物是什么。

我想做的是在启动时创建一个对象,在对 Web API 的一些请求中使用它,而不需要再次重新创建该对象,所以我想把它放在内存中。

我正在使用: - .Net 4.5 - ASP.NET Web API 2.2 - Microsoft.Owin.Host.SystemWeb 3.0.1

我在 Google 和 StackOverflow 上进行了搜索,发现我应该使用 CreatePerOwinContext 方法,但是当我在 Web API 上从客户端获取请求时,我不知道如何获取我设置到上下文中的值。

在旧的 ASP.NET 主机中,我曾经使用过这个:

var myVariable = HttpContext.Application["MyVariable"]

【问题讨论】:

  • @2kay 谢谢,但这个问题并不能解决我的问题。我要求等效于 HttpContext.Application 以及如何使用 OWIN 从中获取价值,而您正在谈论的问题只是说如何使用它进行身份验证。

标签: c# asp.net asp.net-web-api owin


【解决方案1】:

如果您使用CreatePerOwinContext 创建myVariable 类型为myType 的实例,那么您应该能够使用类似以下内容:

HttpContext.GetOwinContext().Get<MyType>()

返回将是myVariable 或默认返回值(如果不存在)。

见:https://msdn.microsoft.com/en-us/library/dn270631(v=vs.113).aspx

但是请注意,CreatePerOwinContext 仍在为每个请求创建指定对象的新实例,因此您需要找到一种方法将内存中的 MyType 实例作为静态 @987654329 的一部分传递@方法由CreatePerOwinContext调用。

或者,您可以在调用Application_Start() 期间在Global.asax 中的WebApiApplication 类上设置一个公共实例,然后在需要时抓住它,但这有点……哎呀。

【讨论】:

  • 看来 CreatePerOwinContext 不是我需要的更好的解决方案,所以我会寻找另一个解决方案。但是我想问你一些事情, HttpContext.GetOwinContext().Get() 需要一个 key 参数,但是在创建 CreatePerOwinContext 时它不要求提供密钥,只要求一个创建方法,那么我在哪里可以设置密钥?谢谢。
  • CreatePerOwinContext 与返回您正在查找的类型的实例的静态方法一起使用。例如,查看带有 Identity 的基本 ASP.NET 项目如何在 Startup_Auth 中使用 CreatePerOwinContext,然后找到在 ApplicationDbContextApplicationUserManager 中的任何一个上定义的静态 Create 方法
猜你喜欢
  • 2015-01-04
  • 2012-01-12
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
相关资源
最近更新 更多