ASP.NET核心2.0独立:通过命令行传递监听URL

时间:2017-08-21 18:07:30

标签: c# asp.net-core kestrel-http-server

我正在按照this tutorial编写我的第一个ASP.NET Core 2.0 Web REST API应用程序。但是我的具体问题是关于在VS2017中创建标准ASP.NET核心Web应用程序时在Program.cs文件中获得的代码,它与描述的here代码相同:

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;

namespace WebApplication5
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}

当我在VS2017中调试时,我的应用程序工作正常,所以我做的下一步是根据this tutorial使其成为一个独立的应用程序,它工作正常,并给我一个可以运行的可执行文件(我' m on windows 10 x64)。

现在的问题是这个可执行文件在端口5000上启动了webserver,但是我希望能够通过命令行参数配置监听URL。

通过查看上面的代码,我们可以看到args被传递给WebHost.CreateDefaultBuilder(args),所以我假设任何命令行参数都被这个函数解释,但我无法弄清楚我是什么必须传递命令行才能让服务器监听另一个端口。

我尝试过以下选项:
- MyApp.exe --UseUrls="http://*:5001"
- MyApp.exe --UseUrls=http://*:5001
- MyApp.exe --server.urls=http://*:5001
- MyApp.exe urls="http://*:5001"

以及其他各种组合......应用程序启动但只能在端口5000上进行监听。

我开始认为我正在尝试一些不可能的事情:)那么它真的不可能还是我错过了什么?

1 个答案:

答案 0 :(得分:7)

在linux中我使用的是./MYAPP urls=http://*:8081 &,但您需要为此修改代码。请尝试相应地更改您的代码:

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

    public static IWebHost BuildWebHost(string[] args)
    {
        var configuration = new ConfigurationBuilder().AddCommandLine(args).Build();

        return WebHost.CreateDefaultBuilder(args)
            .UseConfiguration(configuration)
            .UseStartup<Startup>()
            .Build();
    }