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

默认情况下,它使用5000。

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


当前回答

你可以在asp.net core 2.1+ appsettings中插入Kestrel section。json文件。

  "Kestrel": {
    "EndPoints": {
      "Http": {
        "Url": "http://0.0.0.0:5002"
      }
    }
  },

如果你没有kestrel部分,你可以使用"urls":

{
    "urls":"http://*.6001;https://*.6002"
}

但如果你在appsettings中有kestrel。Json, url部分将失败。

其他回答

在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"

另一种解决方案是使用主机。Json在项目的根目录中。

{
  "urls": "http://localhost:60000"
}

然后在program。cs中

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("hosting.json", true)
        .Build();

    var host = new WebHostBuilder()
        .UseKestrel(options => options.AddServerHeader = false)
        .UseConfiguration(config)
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

当托管在docker容器(linux版本的我),你可能会得到一个'连接拒绝'消息。在这种情况下,您可以使用IP地址0.0.0.0,这意味着“这台机器上的所有IP地址”,而不是localhost环回来修复端口转发。

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

        host.Run();
    }
}

您可以指定托管URL,而不需要对应用程序进行任何更改。

创建Properties/launchSettings。Json文件,然后像这样填充它:

{
  "profiles": {
    "MyApp1-Dev": {
        "commandName": "Project",
        "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
        },
        "applicationUrl": "http://localhost:5001/"
    }
  }
}

dotnet运行命令应该选择您的启动设置。Json文件,并将其显示在控制台中:

C:\ProjectPath [master ≡]
λ  dotnet run
Using launch settings from C:\ProjectPath\Properties\launchSettings.json...
Hosting environment: Development
Content root path: C:\ProjectPath
Now listening on: http://localhost:5001
Application started. Press Ctrl+C to shut down. 

详情:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/environments