【问题标题】:ASP.NET core 2.0 standalone: passing listening url via command lineASP.NET core 2.0 独立版:通过命令行传递监听 url
【发布时间】:2017-08-21 18:07:29
【问题描述】:

我正在按照this tutorial 编写我的第一个 ASP.NET Core 2.0 Web REST API 应用程序。但是我的具体问题是关于您在 VS2017 中创建标准 ASP.NET Core 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 使其成为一个独立的应用程序,它运行良好并为我提供了一个可以运行的可执行文件(我在Windows 10 x64)。

现在的问题是这个可执行文件在端口 5000 上启动了网络服务器,但我希望能够通过命令行参数配置监听 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 上侦听。

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

【问题讨论】:

  • 你在哪里配置/构建IConfiguration ??
  • 有点过时了,但是Can't set the port for Net.Core application in launchSettings.JSON,当时是dotnet run server.urls=http://0.0.0.0:4000(或因此:MyApp.exe server.urls=http://0.0.0.0:4000。不确定它是否可以通过构造函数工作,但您可以使用配置生成器来完成太
  • 我认为 IConfiguration 是在 CreateDefaultBuilder() 函数中构建的
  • 不知道没有在 GitHub 上观看源代码,但以下在我的项目中运行良好。我们现在可以自然地在 program.cs 中构建 IConfiguration
  • 您是否仍然对这方面的情况感兴趣?我刚刚看到问题弹出并深入了解源代码以了解为什么默认情况下不读取 CLA。我有一个解释,但如果你不再感兴趣,我不想浪费时间写出来。

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


【解决方案1】:

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

    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();
    }

【讨论】:

  • 在 Docker 中运行时,您还可以考虑在命令行参数之后(或之前)添加 EnvironmentVariables
  • 如果我是正确的,这在 .net core 2.2 中不再需要了。 (但 YMMV)
猜你喜欢
  • 2016-07-21
  • 2023-01-20
  • 2015-10-01
  • 2017-10-22
  • 1970-01-01
  • 2014-10-17
  • 2014-11-05
  • 2012-11-02
  • 1970-01-01
相关资源
最近更新 更多