我可以在ASP.NET Core中访问OWIN环境字典吗?
我想从Startup.cs
文件中访问它。
我想访问它的原因是因为我想将OWIN环境字典传递给我的中间件或从我的中间件中访问它。
答案 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
传递给您的方法的参数。
我无法在Controller
,ControllerBase
,HttpContext
或ControllerContext
的任何位置找到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]
点数:
AspNetCore.Owin
包将OWIN支持添加到ASP.NET Core。