在Asp.Net Core 2.x中,我可以通过Server Vars获得IIS信息,如下所示:
IServerVariablesFeature serverVars = HttpContext.Features.Get<IServerVariablesFeature>();
string iis_version = serverVars["SERVER_SOFTWARE"];
string app_pool_id = serverVars["APP_POOL_ID"];
即使使用Kestrel作为反向代理,此方法也有效。但是,以这种方式访问IIS服务器变量似乎已在Asp.Net Core 3.x中停止工作。从那时开始,现在在Asp.Net 5.0中IServerVariablesFeature
也不再存在,并且在请求时返回null。
如何访问IIS服务器变量(即https://docs.microsoft.com/zh-cn/previous-versions/iis/6.0-sdk/ms524602(v=vs.90)?redirectedfrom=MSDN)在Asp.Net 5.x中?
实际上,我的测试表明该代码仍然可以在Asp.net 5中运行,并且可以获得IIS变量。 这是代码
using Microsoft.AspNetCore.Http.Features;
IServerVariablesFeature serverVars = HttpContext.Features.Get<IServerVariablesFeature>();
string iis_version = serverVars["SERVER_SOFTWARE"];
string app_pool_id = serverVars["APP_POOL_ID"];
string runtime = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription;
该文档中还提到了IServerVariablesFeature的Asp.net核心版本信息。
适用于ASP.NET Core 5.0 3.1 3.0 2.2
因此,我认为你应该仔细检查应用程序中的其他代码,无论是引用变量时拼写错误还是Asp.net Core 5安装问题。
这很有见地,将对我的调试有所帮助。我已经通过使用新的基本网络应用检查了您的身份,从而验证了您的信息是正确的。我的大型Web应用程序表现出奇怪的行为,已经进行了很多次升级,并在1.0版之前的.Net core RC2中启动,并一直进行升级。升级到3.1时,我一定没有升级正确的东西,所以我要去寻找它。
重要的是要注意,此功能仅在IIS进程中运行时才在Asp.Net 5中可用。请参阅我的答案以获取更多信息。