当在主入口点使用WebHostBuilder时,我如何指定它绑定到的端口?

默认情况下,它使用5000。

请注意,这个问题是特定于新的ASP。NET Core API(目前在1.0.0-RC2中)。


当前回答

以上。net core 2.2方法Main使用WebHost.CreateDefaultBuilder(args)支持args

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

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

您可以构建您的项目并像这样进入bin运行命令

dotnet <yours>.dll --urls=http://0.0.0.0:5001

或者使用多url

dotnet <yours>.dll --urls="http://0.0.0.0:5001;https://0.0.0.0:5002"

编辑2021/09/14

在。net core 3.1之后,你可以修改文件appsettings。Config section Urls和Kestrel都可以工作。你可以用任何一种。url会更简单。

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "MicrosoftHostingLifetime": "Information"
    }
  },
  "Urls": "http://0.0.0.0:5002",
  //"Kestrel": {
  //  "EndPoints": {
  //    "Http": {
  //      "Url": "http://0.0.0.0:5000"
  //    },
  //    "Https": {
  //      "Url": "https://0.0.0.0:5001"
  //    }
  //  }
  //},
  "AllowedHosts": "*"
}

使用http://0.0.0.0:5000可以从远程连接访问web服务器,如果你设置为http://localhost:5000,则只能在你的计算机中访问。

要使Kestrel设置工作,您应该更改项目中的Program.cs中的代码。

        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureServices((context, services) =>
                 {
                     services.Configure<Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions>(context.Configuration.GetSection("Kestrel"));
                 });
                webBuilder.UseStartup<Startup>();
            });

其他回答

在ASP。NET Core 3.1,有4种主要的方法来指定一个自定义端口:

使用命令行参数,用——url =[url]启动你的.NET应用程序:

dotnet run --urls=http://localhost:5001/

使用appsettings。通过添加一个url节点:

{
  "Urls": "http://localhost:5001"
}

使用环境变量,ASPNETCORE_URLS=http://localhost:5001/。 使用UseUrls(),如果你喜欢以编程方式完成:

public static class Program
{
    public static void Main(string[] args) =>
        CreateHostBuilder(args).Build().Run();

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(builder =>
            {
                builder.UseStartup<Startup>();
                builder.UseUrls("http://localhost:5001/");
            });
}

或者,如果你仍然在使用web主机生成器而不是通用的主机生成器:

public class Program
{
    public static void Main(string[] args) =>
        new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .UseUrls("http://localhost:5001/")
            .Build()
            .Run();
}

后续的回答将帮助任何人在VS docker集成中做到这一点。我需要更改到端口8080以使用谷歌appengine中的“灵活”环境运行。

你需要在Dockerfile中添加以下内容:

ENV ASPNETCORE_URLS=http://+:8080
EXPOSE 8080

您需要在docker-compose中修改端口。Yml也是:

    ports:
      - "8080"

我用以下方法修复了Net core 3.1中的端口问题

在Program.cs中

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

    public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
        .ConfigureWebHost(x => x.UseUrls("https://localhost:4000", "http://localhost:4001"))
        .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
}

您可以使用

http://localhost:4000

https://localhost:4001

如果使用dotnet运行

dotnet run --urls="http://localhost:5001"

进入properties/launchSettings。找到你的appname,在这个下面找到applicationUrl。您将看到,它正在运行localhost:5000,将其更改为您想要的任何名称。然后运行dotnet运行......好哇