如何指定托管ASP.NET Core应用程序的端口?

时间:2016-05-21 16:12:45

标签: .net asp.net-core

WebHostBuilder入口点使用Main时,如何指定它所绑定的端口?

默认使用5000。

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

11 个答案:

答案 0 :(得分:142)

您可以使用UseUrls

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

        host.Run();
    }
}

或者,您可以使用配置堆栈配置服务器地址。以下是如何使用命令行参数来传递所需的地址:

public class Program
{
    public static void Main(string[] args)
    {
        var configuration = new ConfigurationBuilder()
            .AddCommandLine(args)
            .Build();

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

        host.Run();
    }
}

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

答案 1 :(得分:39)

通过VS docker集成帮助任何人这样做的后续回答。我需要更改到端口8080以使用google appengine中的“灵活”环境运行。

您的Dockerfile中需要以下内容:

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

并且您还需要修改docker-compose.yml中的端口:

    ports:
      - "8080"

答案 2 :(得分:25)

替代解决方案是在项目的根目录中使用hosting.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();
}

答案 3 :(得分:14)

您可以将Kestrel部分插入asp.net core 2.1+ appsettings.json文件中。

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

答案 4 :(得分:14)

.net core 2.2之上的方法主要通过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://localhost:5001

或带有多个网址

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

答案 5 :(得分:9)

托管在Docker容器中时(对我来说是linux版本),您可能会拒绝连接&#39;信息。在这种情况下,您可以使用IP地址 0.0.0.0 ,这意味着&#34;此机器上的所有IP地址&#34;而不是 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();
    }
}

答案 6 :(得分:6)

在.Net Core 3.1上,只需遵循Microsoft Doc即可,它非常简单:kestrel-aspnetcore-3.1

总结:

  1. 将下面的ConfigureServices部分添加到Program.cs上的CreateDefaultBuilder中:

    // using Microsoft.Extensions.DependencyInjection;
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((context, services) =>
            {
                services.Configure<KestrelServerOptions>(
                    context.Configuration.GetSection("Kestrel"));
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
    
  2. 将以下基本配置添加到appsettings.json文件中(有关Microsoft文章,更多配置选项):

    "Kestrel": {
        "EndPoints": {
            "Http": {
                "Url": "http://0.0.0.0:5002"
            }
        }
    }
    
  3. 在项目的Publish / Debug / Release Binaries文件夹中打开CMD或控制台,然后运行:

    dotnet YourProject.dll
    
  4. 喜欢在http://localhost:5002

  5. 上浏览您的网站/ api

答案 7 :(得分:3)

如果使用dotnet run

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

答案 8 :(得分:2)

或者,您可以通过命令行运行应用程序来指定端口。

只需运行命令:

dotnet run --server.urls http://localhost:5001

注意:5001是要在其上运行的端口。

答案 9 :(得分:1)

转到properties / launchSettings.json并找到您的应用程序名称,然后在此名称下找到applicationUrl。您将看到它正在运行localhost:5000,将其更改为所需的任何值。然后运行dotnet run ... hurrah

答案 10 :(得分:0)

我通过使用以下内容修复了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