我刚开始使用.net Core 2.1,并且我编写了一个自定义ConfigurationProvider,可从一个单独的文件加载我的敏感配置。这对硬编码路径很有用,但我也希望文件的位置存储在配置中。如果在提供程序的设置过程中尝试访问appsettings配置,则值不存在。大概是因为我仍处于配置阶段。是否可以访问它们或失败,是否可以在Startup.cs而非Program.cs中添加另一个配置提供程序?
这就是我想要做的:
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
logging.ClearProviders();
logging.AddConsole();
logging.AddFile(opts =>
{
hostingContext.Configuration.GetSection("FileLoggerOptions").Bind(opts);
});
})
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath);
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
config.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true);
config.AddEncryptedFile(hostingContext.Configuration["SecureSettingsFile"], true, true);
})
.UseStartup<Startup>();
}
如您所见,我能够访问日志记录配置中的配置,但不能访问应用程序配置。我的提供者是AddEncryptedFile
位,而hostingContext.Configuration["SecureSettingsFile"]
应该从appsettings.json中读取值。
此阶段唯一可用的配置是环境变量,我真的不想使用这些变量,因为服务器上有大约30个网站。
我正在尝试做些什么吗?还是必须使用Environment变量或将加密的配置存储在与网站相同的位置上?
谢谢
答案 0 :(得分:4)
您首先需要使用ConfigurationBuilder
来阅读appsettings.json
,然后使用构建器的输出来进行完整的配置。像这样:
.ConfigureAppConfiguration((hostingContext, config) =>
{
var baseConfig = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var secureSettingsFile = baseConfig.GetValue<string>("SecureSettingsFile");
/* ... */
config.AddEncryptedFile(secureSettingsFile, true, true);
})