如何在ASP.NET Core中根据配置条件启用UseIISIntegration
解决方案
你可以通过两种方式实现根据配置条件调用UseIISIntegration:
方案一:提前手动构建配置
先手动加载和CreateDefaultBuilder一致的配置源,拿到配置值后再决定是否调用UseIISIntegration:
// 手动构建配置,匹配CreateDefaultBuilder的默认加载逻辑 var configBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true) .AddEnvironmentVariables() .AddCommandLine(args); var configuration = configBuilder.Build(); var hostBuilder = WebHost .CreateDefaultBuilder(args) .UseConfiguration(configuration) // 将手动构建的配置传入主机构建器 .UseKestrel() .UseStartup<Startup>(); if (configuration.GetValue<bool?>("appSettings:UseWindowsAuthentication") == true) { hostBuilder.UseIISIntegration(); } var host = hostBuilder.Build(); await host.RunAsync();
方案二:直接从WebHostBuilder获取已加载的配置
WebHost.CreateDefaultBuilder会自动加载默认配置源(appsettings.json、环境变量等),你可以通过GetConfiguration()扩展方法在构建主机前获取配置:
var hostBuilder = WebHost .CreateDefaultBuilder(args) .UseKestrel() .UseStartup<Startup>(); // 从主机构建器中获取已加载的配置 var configuration = hostBuilder.GetConfiguration(); if (configuration.GetValue<bool?>("appSettings:UseWindowsAuthentication") == true) { hostBuilder.UseIISIntegration(); } var host = hostBuilder.Build(); await host.RunAsync();
第二种方案更简洁,复用了CreateDefaultBuilder的默认配置加载逻辑,无需手动重复配置源。
内容的提问来源于stack exchange,提问作者chester89
相关产品推荐
相关产品推荐

