如何指定端口一个ASP。NET核心应用程序托管在?

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

默认情况下,它使用5000。

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

321518 次浏览

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

  • 使用命令行参数,用--urls=[url]启动你的.NET应用程序:
dotnet run --urls=http://localhost:5001/
  • 使用appsettings.json,通过添加一个Urls节点:
{
"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"

另一种解决方案是在项目的根目录中使用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();
}

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

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 run命令应该选择你的launchSettings.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

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

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

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

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

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

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

或者,你也可以通过命令行运行app来指定端口。

简单地运行命令:

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

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

以上。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.json, Config部分UrlsKestrel都可以工作。你可以用任何一种。Urls会更简单。

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

如果使用dotnet run

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

在.Net Core 3.1上,只需要遵循微软的文档,它非常简单:红隼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. Add the below basic config to appsettings.json file (more config options on Microsoft article):

    "Kestrel": {
    "EndPoints": {
    "Http": {
    "Url": "http://0.0.0.0:5002"
    }
    }
    }
    
  3. Open CMD or Console on your project Publish/Debug/Release binaries folder and run:

    dotnet YourProject.dll
    
  4. Enjoy exploring your site/api at your http://localhost:5002

我用以下方法修复了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