系统配置 v3.3.3+
在项目开发中配置功能必不可少,常见做法是使用配置文件或数据库。但这些方式存在一些问题——前者不方便修改,需要重新发布项目;后者需要专用的功能页面,工作量大。为了解决这些问题,框架提供了通用的配置功能,统一管理配置数据。
概述
相关的配置项应该放在一起管理,比如用户会话方面的配置,可以包含超时时间、自动续期、是否允许多端在线等内容。 我们把配置项以类的形式组织在一起,一个类表示一组相关的配置,类属性表示具体配置项。
提示
即使仅有一个配置项,也必须放置在某个类内部。这样不仅可以简化存取实现,也可以更好地兼容未来新增配置的场景。
配置的存取基于类实例的 JSON 序列化和反序列化,可以方便地处理不同数据类型的配置项。 另外为了保障配置数据安全,可以随时回滚,还提供了多版本机制。
功能介绍
配置列表
配置列表是主要操作界面,左侧为配置类列表,右侧为该配置的版本明细,如下图所示。 
具体功能为:
| 功能 | 说明 |
|---|---|
| 新增 | 为选中的配置类添加新版本 |
| 复制 | 复制指定的版本为新版本,但不启用 |
| 编辑 | 修改配置内容 |
| 启用 | 启用指定版本的配置,并自动停用其它版本 |
| 删除 | 删除指定版本配置,仅能删除已停用的版本 |
新增编辑
新增编辑界面如下图所示,左侧显示了配置项的说明信息,右侧为配置内容和备注的输入区。

配置定义
配置类完全由后端定义,前端无法添加。编写一个承载配置项的类,然后添加相应特性声明即可。
csharp
/// <summary>
/// 跨域设置
/// </summary>
[ConfigData("网络设置", "cfg_cors", "跨域设置")]
public class CorsConfig
{
/// <summary>
/// 允许域名
/// </summary>
[ConfigItem("允许域名", "每行一个")]
public List<string> AllowOrigins { get; set; } = [];
/// <summary>
/// 自定义响应头
/// </summary>
[ConfigItem("自定义响应头")]
public List<string> ResponseHeaders { get; set; } = [];
}提示
配置类还用来生成配置模板,因此推荐为每个配置项添加适当的默认值。这样不仅可以清晰传达数据类型,也可以在配置不存在时提供默认内容。
在上例中,我们声明了一个“跨域设置”的配置类,包含“允许域名”、“自定义响应头”两个配置项。 其关键在于两个特性的使用:
ConfigDataAttribute
- 说明:声明配置类。
- 参数:
- category {string} 类别,用于多个配置类的分组归类。仅在前端显示用。
- code {string} 配置类的唯一标识,不允许重复。
- name {string} 配置类描述,仅显示用。
- publicUse {bool} 是否公开使用,即能否在前端通过 API 获取。默认为 false。
ConfigItemAttribute
- 说明:声明配置项。
- 参数:
- name {string} 中文名称,用于在新增编辑界面生成配置项说明。
- description {string} 描述信息,用于在新增编辑界面生成配置项说明。
配置获取
API
GET /api/sys-configs/value/{code}
- 说明:获取指定配置信息。该配置类必须声明
publicUse为 true。 - 参数:
- code {string} 配置类的唯一标识
- 返回:配置数据。
服务方法
T GetConfig<T>()
- 说明:获取配置。T 为配置类。
- 参数:无
- 返回:配置对象
csharp
[Autowired]
ISysConfigService service;
var setting = service.GetConfig<CorsConfig>();
Console.WriteLine(setting.AllowOrigins);