在WebHostBuilder
入口点使用Main
时,如何指定它所绑定的端口?
默认使用5000。
请注意,此问题特定于新的ASP.NET Core API(目前在1.0.0-RC2中)。
答案 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
总结:
将下面的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>();
});
将以下基本配置添加到appsettings.json
文件中(有关Microsoft文章,更多配置选项):
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://0.0.0.0:5002"
}
}
}
在项目的Publish / Debug / Release Binaries文件夹中打开CMD或控制台,然后运行:
dotnet YourProject.dll
答案 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