.net core 如何在ASP.NET核心中确定运行时的Web服务器类型?

.net core 如何在ASP.NET核心中确定运行时的Web服务器类型?,.net-core,.net Core,对于C#来说,是否有一种简单的方法可以在运行时判断.NET核心网站是否在以下环境下运行:Kestrel;IIS Express;阿帕奇;全面发展的非法入境者;或者,其他一些Web服务器 我可能找不到正确的地方,但我没有在HttpContext中看到信息 更新:当我查看HttpContext.Response.Headers键和值时,它们非常稀少。我在一个过滤器中执行此操作,以记录以下连接信息: 我不确定检查响应标题的位置是否与我遇到的问题有关。 似乎没有内置方式,但是您可以识别应用程序运行的

对于C#来说,是否有一种简单的方法可以在运行时判断.NET核心网站是否在以下环境下运行:Kestrel;IIS Express;阿帕奇;全面发展的非法入境者;或者,其他一些Web服务器

我可能找不到正确的地方,但我没有在HttpContext中看到信息

更新:当我查看HttpContext.Response.Headers键和值时,它们非常稀少。我在一个过滤器中执行此操作,以记录以下连接信息:

我不确定检查响应标题的位置是否与我遇到的问题有关。
似乎没有内置方式,但是您可以识别应用程序运行的windows进程

您可以使用
Process.GetCurrentProcess().ProcessName
获取名称,然后识别以下值,并返回相应的服务器

    w3wp.exe is IIS 6.0 and later.
    aspnet_wp.exe is earlier versions of IIS.
    iisexpress.exe is IISExpress.
    dotnet.exe is ASP.NET Core.
    inetinfo.exe is older ASP applications running in-process.

e、 g

ServerEnum GetRunningProcessManager()
{
var procName=Process.GetCurrentProcess().ProcessName;
开关(procName)
{
案例“w3wp.exe”:
返回服务器enum.IIS6Later;
...
违约:
返回ServerEnum.Unknown;
}
}

你为什么需要知道这一点?@sommen-主要是出于安全原因。我知道这可能是一种不好的做法,但目前,可能有多个Web服务器在同一台物理机器上运行。根据上面的更新,我将通过filter.idk自动记录连接信息等关于不良做法的信息,但是asp.net是在不知道服务器实现的情况下运行的,因此asp.net更具可移植性。您现在引入的逻辑可能会使应用程序依赖于其运行的服务器,这将是令人遗憾的。我正试着和你一起思考如何解决这个问题。不过,我会对此进行内部化/注释,以确保没有人会使用此代码并在其基础上进行构建,并生成实际的服务器依赖性代码。@Sommen-我只想记录web服务器类型(以及其他相关信息),以供法医学使用,因为我是“偏执狂”。我不打算使用这些信息来控制应用程序的行为,除非它以某种方式提醒安全性。我明白了,在这种情况下,我个人更愿意记录主机名、进程名和持久化clientID(guid?)。我在其他跟踪工具中也看到了这种方法。这样你就不需要依赖这个,但是你仍然可以得到你需要的所有信息。