我希望能够在 Web 服务器启动后添加/删除 Kestrel 上侦听的端口(通常通过 IWebHostBuilder 中的
UseUrls
方法进行配置)。我不想在处理,因为我需要继续为其他端口上的任何现有请求提供服务,这可能吗?
我能够通过注入
IConfiguration
并在将端点添加到 Kestrel
部分后触发重新加载来以编程方式添加端点:
// IConfiguration comes from DI
public class KestrelReloader(IConfiguration config) {
private async Task Reload()
{
const string apiUrl = "http://localhost:5001";
var section = config.GetSection("Kestrel:EndPoints:HttpLocalhost:Url");
section.Value = apiUrl;
if (config is IConfigurationRoot configRoot)
{
configRoot.Reload();
}
}
}