Mik*_*MVP 5 asp.net-mvc http.sys kestrel-http-server asp.net-core
了解我的应用程序是在 Kestrel 还是 HTTP.sys 下运行的最佳方法是什么。到目前为止,我所发现的只是检查 HttpConext 属性类名称之一中是否有“Kestrel”。
在 MVC 控制器中我可以执行以下操作:
Boolean IsKestrel = HttpContext.Features.GetType().ToString().Contains("Kestrel");
Run Code Online (Sandbox Code Playgroud)
即检查这个:
Features = {Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection<Microsoft.AspNetCore.Hosting.HostingApplication.Context>}
Run Code Online (Sandbox Code Playgroud)
使用 HTTP.sys 时我只得到:
Features = {Microsoft.AspNetCore.Http.Features.FeatureCollection}
Run Code Online (Sandbox Code Playgroud)
(这里的“Http”足以知道这是HTTP.sys吗?)
一定会有更好的办法。是否有一个明显的属性包含正在使用的主机的名称?
更广泛的问题可能是,我如何知道构建器模式构建了什么?
更新
找到了更好的东西,但仍在寻找具有服务器名称或类型的属性。
在 MVC 控制器中:
var isKestrel = HttpContext.Request.Headers.GetType().ToString().Contains(".Kestrel.");
var isHTTPsys = HttpContext.Request.Headers.GetType().ToString().Contains(".HttpSys.");
Run Code Online (Sandbox Code Playgroud)
在操作系统级别,netsh http show servicestate将列出通过 HTTP.SYS 侦听的所有活动 URL。
在 netcore 6 中,您可以从代码中找到一个实例Microsoft.AspNetCore.Hosting.Server.IServer并检查其实现:
Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImplMicrosoft.AspNetCore.Server.IIS.Core.IISHttpServerMicrosoft.AspNetCore.Server.HttpSys.MessagePump这依赖于实现细节(因此可能会中断),其他扩展也可以更改这些细节,例如 CoreWcf 创建CoreWCF.Configuration.WrappingIServer包装上述实现之一。
您可以使用System.Diagnostics.Process.GetCurrentProcess().ProcessName
| 归档时间: |
|
| 查看次数: |
2527 次 |
| 最近记录: |