我目前正在 Kestrel(本地)或 IIS InProcess(生产)下运行我的应用程序。
return WebHost.CreateDefaultBuilder(args)
.ConfigureKestrel(options => options.AddServerHeader = false)
.UseIIS()
.UseStartup<Startup>();
我希望能够在运行时在 Controller 中获取托管服务器名称,以便实现以下目标:
if (hostingServer == "kestrel")
{
DoSomething();
}
else
{
DoSomethingElse();
}
在这种特定情况下,它是为了解决这样一个事实,即 Kestrel 的响应 header 不支持非 ascii 字符。理想情况下,我会删除非 ascii header ,但目前它是遗留互操作性所必需的。
如有任何帮助,我们将不胜感激。
最佳答案
最简单的方法可能是阅读 System.Diagnostics.Process.GetCurrentProcess().ProcessName
。如果它是 w3wp
或 iisexpress
你知道主机是 IIS/IIS Express,而 dotnet
(或其他名称,当你使用独立部署时) 表示红隼。这仅适用于进程中的部署。如果您不在流程中,这将不起作用。在 https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module 了解更多信息
例子:
/// <summary>
/// Check if this process is running on Windows in an in process instance in IIS
/// </summary>
/// <returns>True if Windows and in an in process instance on IIS, false otherwise</returns>
public static bool IsRunningInProcessIIS()
{
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
return false;
}
string processName = Path.GetFileNameWithoutExtension(Process.GetCurrentProcess().ProcessName);
return (processName.Contains("w3wp", StringComparison.OrdinalIgnoreCase) ||
processName.Contains("iisexpress", StringComparison.OrdinalIgnoreCase));
}
关于c# - 在 aspnet core 运行时检查托管服务器是 IIS 还是 Kestrel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55852820/