gpt4 book ai didi

kestrel-http-server - ASP.NET Core 2 不从 appsettings 读取端点

转载 作者:行者123 更新时间:2023-12-04 03:10:05 25 4
gpt4 key购买 nike

我正在尝试使用 ASP.NET Core 2.0 通过 appsettings.json 中的设置配置 Kestrel 端点的新方法。这在 Microsoft Build 2017 事件中得到了演示(参见 YouTube 时间范围 21:00-26:20)。

演讲者说(并演示)以下将在 Kestrel 上配置监听端口:

{
"Message": "TEST!!",
"Kestrel": {
"Endpoints": {
"Localhost": {
"Address": "127.0.0.1",
"Port": "5011"
}
}
}
}

但这对我没有用。当我使用“dotnet run”时,默认端口 5000 仍在使用。我知道正在加载 appsettings.json 文件,因为我可以在其他地方使用 Message 值。

来自 GitHub 上的代码,我看不到任何配置 Kestrel 的地方。

有没有其他人能够让这个方法起作用?我不明白它在演示中是如何工作的,但在我自己的代码中却不明白。

最佳答案

我知道不久前有人问过这个问题,但我认为在这个问题上发帖是有意义的,因为自从最初提出这个问题以来,ASP.NET Core 框架已经得到增强,可以从应用程序设置中支持 Kestrel 端点配置。请在下面找到有关如何在 ASP.NET Core 2.1 和更早版本中实现该目标的更多详细信息和小摘要。

从 ASP.NET Core 2.1 版开始,可以在应用程序设置中配置 Kestrel 端点,如 documentation 中所述.

更多详细信息,可以查看实际WebHost.CreateDefaultBuilder()执行:从 2.1 版开始,它加载 Kestrel 配置部分,而在 ASP.NET Core 早期版本上,有必要在设置 WebHost 时显式调用 UseKestrel()

ASP.NET Core 2.1 设置

在 ASP.NET Core 2.1 上,您只需提供以下 appsettings.json 即可将 Kestrel 设置为监听 http://127.0.0.1:5011:

{
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://127.0.0.1:5011"
}
}
}
}

请注意,您需要使用 Url 而不是 AddressPort

ASP.NET Core 2.0 设置

在 ASP.NET Core 2.0 上,可以通过在 Program.cs 中显式调用 UseKestrel() 来实现完全相同的行为。您可以使用扩展方法来保持您的 Program.cs 干净:

public class Program {

public static void Main(string[] args) {

// configuration
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true)
.AddCommandLine(args)
.Build();

// service creation
var webHost = WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrelEndpoints(config) // extension method to keep things clean
.UseConfiguration(config)
.UseApplicationInsights()
.Build();

webHost.Run();

}

}

UseKestrelEndpoints() 是一种扩展方法,它查看实际配置设置并相应地设置 Kestrel 选项:

public static IWebHostBuilder UseKestrelEndpoints(this IWebHostBuilder webHostBuilder, IConfiguration configuration) {

var endpointSection = configuration.GetSection("kestrel:endpoints");

if (endpointSection.Exists()) {

webHostBuilder.UseKestrel(options => {

// retrieve url
var httpUrl = endpointSection.GetValue<string>("http:url", null);

/* setup options accordingly */

});

}

return webHostBuilder;

}

如果需要,您可以 setup HTTPS以类似的方式。

关于kestrel-http-server - ASP.NET Core 2 不从 appsettings 读取端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45982693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com