.NET Core/ASP.NET Core应用程序编程开发中如何在运行时使用代码动态修改appsettings.json配置文件中的参数值?
在.NET Core/ASP.NET Core的应用程序编程开发中,通常会把一些关于应用程序的配置参数放到appsettings.json这个配置文件中,应用程序启动的时会读取指定的配置文件中的各种参数。那是否有可能在程序运行时通过代码去修改这些配置参数呢,如果可以又应该如何实现呢?
比如这里有个配置文件:
{
"Locations": {
"Name": "Hello"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
现在想要在程序行动时动态从控制器或者其他地方修改Locations节点的子节点Name的值,应该如何实现?
1 个回答
-
1.创建一个配置项目的实体类(Locations.cs)
2.再定义一个继承至
Microsoft.Extensions.Options.IOption接口的的可写选项泛型接口IWritableOptions.cs,如下:3.接着实现接口
IWritableOptions.cs的类WritableOptions.cs:注意: ASP.NET Core 3.0及以上,请自行安装
NewtonsoftJson序列化组件,包管理工具命令如:Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson -Version 3.1.34.再实现一个
ServiceCollectionExtensions的静态扩展类和方法,以便在Startup.cs中注册服务,如下:5.在
Startup.cs文件中注册服务,如下:6.最后创建一个控制器,在此控制器中写方法来动态修改配置文件中
Locations节点的配置参数,如下:打开地址:http://localhost:5772/api/options/change/123 ,如果浏览器返回
OK,则表示修改成功,再打开appsettings.json文件查看Locations节点的参数值是否被成功修改了呢?注: localhost:5772 这个地址是我的测试项目地址,请根据你的实际项目地址进行替换。
为了展示.NET Core应用程序自动刷新
appsettings.json的参数,我们需要进一步的设置。在Program.cs文件中配置appsettings.json配置文件reloadOnChange=true,如下:再打开地址:http://localhost:5772/api/options/read 查看配置参数是否自动刷新成修改后的最新的数据。