Kestrel 现在对项目
Kestrel 将根据需要绑定、取消绑定和重新绑定终结点,以响应这些配置更改。
有关讨论,请参阅 dotnet/aspnetcore#22807。
引入的版本
5.0 预览版 7
旧行为
在 ASP.NET Core 5.0 预览版 6 之前,Kestrel 不支持在运行时更改配置。
在 ASP.NET Core 5.0 预览版 6 中,可以选择在运行时响应配置更改的现默认行为。 要选择加入,需要手动绑定 Kestrel 的配置:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args) =>
CreateHostBuilder(args).Build().Run();
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseKestrel((builderContext, kestrelOptions) =>
{
kestrelOptions.Configure(
builderContext.Configuration.GetSection("Kestrel"), reloadOnChange: true);
});
webBuilder.UseStartup<Startup>();
});
}
新行为
默认情况下,Kestrel 对运行时的配置更改做出反应。 为支持该更改,ConfigureWebHostDefaults 默认使用 KestrelServerOptions.Configure(IConfiguration, bool) 调用 reloadOnChange: true。
更改原因
进行了更改以支持在运行时重新配置终结点,而无需完全重启服务器。 与完全重启服务器不同,未更改的终结点甚至不会暂时解除绑定。
建议操作
对于 Kestrel 的默认配置节在运行时不更改的大多数场景,此更改没有影响,不需要采取任何行动。
对于那些 Kestrel 的默认配置节在运行时确实发生更改并要求 Kestrel 做出反应的情况,现在这已经成为默认行为。
对于 Kestrel 在运行时更改的默认配置部分且 Kestrel 不应对其做出反应的方案,可以选择退出,如下所示:
using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; public class Program { public static void Main(string[] args) => CreateHostBuilder(args).Build().Run(); public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseKestrel((builderContext, kestrelOptions) => { kestrelOptions.Configure( builderContext.Configuration.GetSection("Kestrel"), reloadOnChange: false); }); webBuilder.UseStartup<Startup>(); }); }
注意:
此更改不会修改 KestrelServerOptions.Configure(IConfiguration) 重载的行为,它仍默认为 reloadOnChange: false 行为。
另外,请务必确保配置源支持重载。 对于 JSON 源,将通过调用 AddJsonFile(path, reloadOnChange: true) 配置重载。 默认情况下,已为 appsettings.json 和 appsettings.{Environment}.json 配置重载。