.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.3
4.再实现一个
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 查看配置参数是否自动刷新成修改后的最新的数据。