c# - 覆盖 asp.net 核心中的 appsettings 值
问题描述
我通过在 azure 门户中配置它们来覆盖 appsettings.json 文件中设置的值。为此,我进行了以下更改,这些更改工作正常,除非我调试我的代码。
启动.cs
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
Configuration = configuration;
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
DBContext.ConnectionString = Configuration.GetConnectionString("Connectionstr");
Constants.AppLogicURI = Configuration["MailUri:LogicAppUri"];
Constants.BlobStorageKey = Configuration["BlobKey:BlobStorageKey"];
Constants.BlobStorageConnectionString = Configuration["BlobConnectionString:BlobStorageConnectionString"];
Constants.BlobUri = Configuration["Uri:BlobUri"];
Constants.StorageAccount = Configuration["AccountName:StorageAccount"];
}
当我调试我的代码时,由于应用程序无法启动,我没有从 appsettings.json 文件中获取任何值。
如果我注释掉该行,我只会得到值Configuration = builder.Build();
不知道为什么我需要这样做以及如何解决这个问题。
解决方案
您的文件没有被读取的原因是appsettings.json
因为您没有调用SetBasePath
. ConfigurationBuilder
这通常是使用Directory.GetCurrentDirectory()
in为您处理的WebHost.CreateDefaultBuilder
,它本身用于 in Program.cs
。
虽然你可以只调用SetBasePath
你的构造函数,但是当你可以使用传入的实例时Startup
,没有真正的理由创建你自己的实例。这个实例已经配置为从环境变量和环境变量中读取,环境变量覆盖那些中指定。IConfiguration
IConfiguration
appsettings.json
appsettings.json
您在 Azure 门户的“应用程序设置”和“连接字符串”部分中指定的任何设置都将覆盖appsettings.json
文件中指定的设置,因为它们作为环境变量添加到 Azure 环境中。
推荐阅读
- python - Keras fit_generator 的验证准确性与使用相同数据手动计算时不同
- python - 打印python字典时如何更改键颜色
- java - com.liferay.portal.kernel.scheduler.SchedulerEngine:PORTLET_ID 无法解析或不是字段
- angular - Angular 8:如何将查询参数绑定到输入字段
- python - 使用 urllib [Errno 2] 下载图像没有这样的文件或目录
- c++ - C++ 字符串:size_t 和 string::npos
- r - 仅返回在 r 中一次匹配多个条件的行数
- mongodb - 计算 MongoDB 中的唯一文档
- c# - 遍历 ExpandoObject 会引发 StackOverflowException
- reactjs - 如何将道具传递给路由中的组件?