当WebHostBuilder
在Main
入口点,我怎么可以指定它绑定到端口?
默认情况下,它使用5000。
请注意,此问题特定于新的ASP.NET Core API(当前在1.0.0-RC2中)。
当WebHostBuilder
在Main
入口点,我怎么可以指定它绑定到端口?
默认情况下,它使用5000。
请注意,此问题特定于新的ASP.NET Core API(当前在1.0.0-RC2中)。
Answers:
在ASP.NET Core 3.1中,有四种主要方法可以指定自定义端口:
--urls=[url]
: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/");
});
}
或者,如果您仍在使用网络主机构建器而不是通用主机构建器:
public class Program
{
public static void Main(string[] args) =>
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseUrls("http://localhost:5001/")
.Build()
.Run();
}
UseUrls
是@Oleg,但使用ASP.NET团队推荐的用于自托管方案的方法(显然,值本身不必进行硬编码)。就是说,我更新了答案,以提及您如何使用配置生成器来做到这一点。
using Microsoft.Extensions.Configuration.CommandLine;
您可以将Kestrel部分插入asp.net core 2.1+ appsettings.json文件中。
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://0.0.0.0:5002"
}
}
},
dotnet publish
。
跟进答案以通过VS docker集成帮助任何这样做的人。我需要更改为端口8080才能在Google Appengine中使用“灵活”环境运行。
您将在Dockerfile中需要以下内容:
ENV ASPNETCORE_URLS=http://+:8080
EXPOSE 8080
并且您还需要在docker-compose.yml中修改端口:
ports:
- "8080"
替代解决方案是hosting.json
在项目的根目录中使用a 。
{
"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();
}
urls
-谢谢@ManishJain
您可以指定托管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 : //docs.microsoft.com/zh-cn/aspnet/core/fundamentals/environments
[ProjectRoot]/Properties/launchSettings.json
,但美丽的是,它可以顺利运行。
dotnet run
您需要访问源代码。
在.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://localhost:5001
或带有多个网址
dotnet <yours>.dll --urls="http://localhost:5001,https://localhost:5002"
当托管在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();
}
}
在.Net Core 3.1上,只需遵循Microsoft Doc即可,它非常简单: kestrel-aspnetcore-3.1
总结一下:
将下面的ConfigureServices部分添加到on的CreateDefaultBuilder上Program.cs
:
// 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"
}
}
}
在项目的“发布/调试/发布二进制文件”文件夹上打开CMD或控制台,然后运行:
dotnet YourProject.dll
在您的http:// localhost:5002上探索您的站点/ api
我使用以下方法修复了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
launchSettings.json
从Properties
文件夹检查。您可以在中更改端口launchUrl
。