.net Core 3主机:如何检测控制台模式

时间:2019-11-28 08:06:05

标签: .net asp.net-core .net-core

我使用通用主机制作了一个简单的ASP.net核心Web API项目:

    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

现在,我希望能够检测该应用程序是作为命令行应用程序(dotnet myapp.dll启动的,还是由其他东西(例如IIS)托管的。 / p>

在前一种情况下,我希望能够向控制台提供一些交互性,例如:

 public static async Task Main(string[] args)
    {
        using IHost host = CreateHostBuilder(args).Build();

        if (IsConsoleApplication)
        {
            await host.StartAsync();
            while (true)
            {
                string s = Console.ReadLine();

                if (s == "q")
                {
                    await host.StopAsync();
                    return;
                }

                //Run command according to the value of s
                // ...
            }
        }
        else
        {
            await host.RunAsync();
        }
    }

我已经尝试通过以下方式实现IsConsoleApplication

    Environment.UserInteractive;

    Console.In != StreamReader.Null;

但是我没有成功。

有没有进行这种测试的好方法?

1 个答案:

答案 0 :(得分:2)

选项1

IIS或IIS Express将设置环境变量,例如IIS_DRIVE,IIS_USER_HOME,ASPNETCORE_IIS_PHYSICAL_PATH等。 因此,您可以通过

检查它们的存在

Environment.GetEnvironmentVariable("....")

但是,您需要测试所有环境,以确保变量足够可靠。

选项2

考虑通过命令行参数(例如。

)启动“交互式”模式的选项。
dotnet myapp.dll interactive

在代码中,检查args[0]的值是否为“ interactive”。