我正在创建一个 ASP.NET Core 2.0 应用程序以在 .NET Core 2.0 运行时运行,这两个运行时目前都处于预览版本。但是,我不知道如何让 Kestrel 使用默认的
http://localhost:5000
监听 URL 之外的其他内容。
我能在 Google 上找到的大多数文档都谈到了
server.urls
设置,即使在 1.0 预览版中,该设置似乎也已更改为 urls
。但是,这两种方法都不起作用(打开调试日志记录后 Kestrel 告诉我没有配置监听端点)。
很多文档还讨论了
hosting.json
并且我无法使用默认的 appsettings.json 文件。但是,如果我比较加载新配置的推荐方法,这看起来与新的 WebHost.CreateDefaultBuilder
方法的作用非常相似,除了它加载文件 appsettings.json.
我目前不明白文件 appsettings.json 和
IConfigureOptions<T>
是如何相关的(如果有的话),所以我的问题可能源于对 KestrelServerOptionsSetup
实际作用缺乏了解。
要在 appsettings.json 中设置监听 URL,请添加“Kestrel”部分:
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:5000"
}
}
}
参考:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2
我用这个工作了:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)
.Build()
)
.UseStartup<Startup>()
.Build();
还有 hosting.json 文件:
{ "urls": "http://*:5005;" }
对我来说就像以前一样
WebHost.CreateDefaultBuilder(args)
.UseConfiguration( new ConfigurationBuilder().AddCommandLine(args).Build() )
.UseStartup<Startup>()
.Build();
然后
dotnet myapp.dll --urls "http://*:5060;"
以上都不适合我。这对我有用:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(System.Net.IPAddress.Loopback, 44306, listenOptions =>
{
listenOptions.UseHttps("mysertificate.pfx", "thecertificatePassword");
});
})
.Build();
(将44306更改为自己喜欢的端口)
这些解决方案对 2024 年 3 月运行 net8.0 和带有顶级语句的最小 WebAPI 的我来说都没有真正起作用。
我终于发现了可以添加到我的 Program.cs 中的代码,效果很好:
var portNumber = 5270;
builder.WebHost.ConfigureKestrel((context, serverOptions) =>
{
serverOptions.Listen(System.Net.IPAddress.Loopback, portNumber);
});
这将我的应用程序设置为在 127.0.0.1:5270 上运行。