已注释AddJsonFile,.NET 7 API仍加载appsettings.json问题排查
问题原因
ASP.NET Core(包括.NET 7)中,WebApplication.CreateBuilder(args) 会自动注册一系列默认配置源,其中就包含 appsettings.json 和 appsettings.{ASPNETCORE_ENVIRONMENT}.json 文件。即使你手动构建了 ConfigurationBuilder 并注释了 .AddJsonFile,如果后续创建 WebApplication 时没有覆盖默认配置逻辑,这些JSON配置文件依然会被自动加载,导致你的配置仍然包含JSON文件中的内容。
你的代码中只是单独构建了一个配置实例,但如果没有将这个实例替换到Web应用的配置体系中,应用还是会使用默认的配置源(包括JSON文件)。
解决方案
你需要修改代码,确保应用完全使用Azure App Configuration作为配置源,移除默认的JSON配置加载逻辑,有两种可行方式:
方式1:替换Web应用的配置为自定义构建的实例
直接将你手动构建的配置实例替换到 WebApplicationBuilder 的配置集合中,同时清除默认的配置源:
public static void Main(string[] args) { var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); // 构建自定义配置(仅包含Azure App Configuration) var customConfig = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddAzureAppConfiguration() .Build(); // 创建Web应用构建器 var builder = WebApplication.CreateBuilder(args); // 清除所有默认配置源 builder.Configuration.Clear(); // 添加自定义配置 builder.Configuration.AddConfiguration(customConfig); // 后续的服务注册、中间件配置等逻辑 // ... var app = builder.Build(); // ... app.Run(); }
方式2:移除默认配置源中的JSON文件加载项
在 WebApplicationBuilder 创建后,直接移除所有JSON类型的配置源,再添加Azure App Configuration:
public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // 移除所有JSON配置源(包括appsettings.json和环境特定的JSON文件) builder.Configuration.Sources.RemoveWhere(source => source is JsonConfigurationSource); // 添加Azure App Configuration builder.Configuration.AddAzureAppConfiguration(); // 后续逻辑 // ... var app = builder.Build(); // ... app.Run(); }
验证方法
修改代码后重新部署到Azure App Service,不需要删除site/wwwroot下的appsettings.json,直接重启应用服务,此时应用应该无法获取JSON文件中的配置,若Azure App Configuration中缺少必要配置,会触发预期的错误,说明默认JSON配置已被禁用。
内容的提问来源于stack exchange,提问作者JQL

