我可以访问OWIN环境字典吗?

时间:2016-09-10 18:02:46

标签: asp.net-core owin

我可以在ASP.NET Core中访问OWIN环境字典吗?

我想从Startup.cs文件中访问它。

我想访问它的原因是因为我想将OWIN环境字典传递给我的中间件或从我的中间件中访问它。

2 个答案:

答案 0 :(得分:5)

是的,你可以!

首先安装Microsoft.AspNetCore.Owin包。

然后,从任何地方获得HttpContext的实例,您可以使用HttpContext作为构造函数的参数创建OwinEnvironment类的实例。

var environment = new OwinEnvironment(HttpContext);

这没有任何索引器,所以你不能environment["owin.RequestProtocol"],但你可以这样做:

var requestProtocol = environment.Single(x => x.Key == Owin.RequestProtocol");

但是,您可以通过以下操作将其设为.ToDictionary字典:

var dictionary = environment.ToDictionary(x => x.Key, x => x.Value);

现在它有一个索引器,你可以引用像environment["owin.RequestProtocol"]这样的键来获取值。

还有OwinFeatureCollection类可以提供环境以获取字典。

var environment = new OwinEnvironment(HttpContext);
var features = new OwinFeatureCollection(environment);
var requestProtocol = features["owin.RequestProtocol"];

但是,Microsoft.AspNetCore.Owin中的强类型访问器不再有OWinContext,即Microsoft.Owin名称空间位于不同的包中。

答案 1 :(得分:1)

我开始相信OWIN环境只能通过安装Microsoft.AspNetCore.Owin扩展方法UseOwin类的包IApplicationBuilder来实现。

然后它仅在Configure方法的Startup.cs中可用,作为app.UseOwin传递给您的方法的参数。

我无法在ControllerControllerBaseHttpContextControllerContext的任何位置找到OWIN环境词典。 HttpContext虽然有Items字典。

您可以使用HttpContext中找到的数据自己手动构建自己的OWIN环境。但仅限于app.UseOwin内部。

https://docs.asp.net/en/latest/fundamentals/owin.html#owin-keys

ASP.NET Core中具有附加AspNetCore.Owin包的库存OWIN环境如下所示:

[owin.RequestProtocol, HTTP/1.1]
[owin.RequestScheme, http]
[owin.RequestMethod, GET]
[owin.RequestPathBase, ]
[owin.RequestPath, /]
[owin.RequestQueryString, ]
[owin.RequestHeaders, Microsoft.AspNetCore.Owin.DictionaryStringArrayWrapper]
[owin.RequestBody, Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameRequestStream]
[owin.RequestUser, ]
[owin.ResponseStatusCode, 200]
[owin.ResponseReasonPhrase, ]
[owin.ResponseHeaders, Microsoft.AspNetCore.Owin.DictionaryStringArrayWrapper]
[owin.ResponseBody, Microsoft.VisualStudio.Web.BrowserLink.Runtime.ScriptInjectionFilterStream]
[server.OnSendingHeaders, System.Action`2[System.Action`1[System.Object],System.Object]]
[server.ConnectionId, 0HKV72R0U3SDL]
[server.LocalPort, 27417]
[server.RemotePort, 56374]
[server.LocalIpAddress, 127.0.0.1]
[server.RemoteIpAddress, ::1]
[server.User, ]
[owin.CallCancelled, System.Threading.CancellationToken]
[owin.Version, 1.0]
[Microsoft.AspNetCore.Http.HttpContext, Microsoft.AspNetCore.Http.DefaultHttpContext]

点数:

  • OWIN不是ASP.NET Core的一部分。
  • ASP.NET核心MVC不是在OWIN的基础上构建的。
  • 可以使用AspNetCore.Owin包将OWIN支持添加到ASP.NET Core。