【问题标题】:Get IIS version or other IIS Server variables in Asp.Net 5?在 Asp.Net 5 中获取 IIS 版本或其他 IIS 服务器变量?
【发布时间】:2020-12-02 03:19:16
【问题描述】:

在 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。

如何在 Asp.Net 5.x 中访问 IIS 服务器变量(即https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms524602(v=vs.90)?redirectedfrom=MSDN)?

【问题讨论】:

    标签: asp.net-core iis


    【解决方案1】:

    其实我的测试表明,这段代码在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 核心版本信息在document 中也有提及。

    适用于 ASP.NET 核心 5.0 3.1 3.0 2.2

    所以我认为你应该仔细检查应用程序中的其他代码,是否可能是引用变量时拼写错误,或者Asp.net Core 5的安装有问题。

    【讨论】:

    • 这很有见地,有助于我的调试。我已通过使用新的基本网络应用程序检查它来验证您是正确的。我表现出奇怪行为的大型 Web 应用程序已多次升级,并在 1.0 版本之前的 .Net core RC2 中启动,并一直在升级。我在升级到 3.1 时一定没有正确升级某些东西,所以我要去寻找它。
    • 需要注意的是,这个功能只有在 IIS 进程中运行时才在 Asp.Net 5 中可用。有关更多信息,请参阅我的答案。
    【解决方案2】:

    在进行更多研究后,我发现我无法访问 IServerVariablesFeature 功能的原因是因为我运行了我的 Web 应用程序 OutOfProcess。

    从 .NetCore 3.0 开始,IServerVariablesFeature 功能仅在 IIS 的进程中运行时可用。否则返回null。这似乎是一个特征回归,因为即使在 Asp.Net Core 2.2 中的进程用完时该功能也能正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2012-01-08
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      相关资源
      最近更新 更多