服务提供者
本页由英文自动翻译。 阅读原文
服务提供者是一种将 Sisk 应用程序移植到不同环境的方式,使用可移植的配置文件。该功能允许您在不修改应用程序代码的情况下更改服务器端口、参数和其他选项。该模块依赖于 Sisk 构造语法,可以通过 UsePortableConfiguration 方法进行配置。
一个配置提供者是通过 IConfigurationProvider 实现的,它提供了一个配置读取器,可以接收任何实现。默认情况下,Sisk 提供了一个 JSON 配置读取器,但也有一个用于 INI 文件的包。您也可以创建自己的配置提供者并注册它:
using var app = HttpServer.CreateBuilder()
.UsePortableConfiguration(config =>
{
config.WithConfigReader<MyConfigurationReader>();
})
.Build();如前所述,默认提供者是一个 JSON 文件。默认情况下,文件名为 service-config.json,它在运行进程的当前目录中搜索,而不是可执行文件目录。
您可以选择更改文件名,以及 Sisk 应该在哪里查找配置文件:
using Sisk.Core.Http;
using Sisk.Core.Http.Hosting;
using var app = HttpServer.CreateBuilder()
.UsePortableConfiguration(config =>
{
config.WithConfigFile("config.toml",
createIfDontExists: true,
lookupDirectories:
ConfigurationFileLookupDirectory.CurrentDirectory |
ConfigurationFileLookupDirectory.AppDirectory);
})
.Build();上面的代码将在运行进程的当前目录中查找 config.toml 文件。如果找不到,它将在可执行文件所在的目录中查找。如果文件不存在,createIfDontExists 参数将被尊重,创建一个空文件,在最后测试的路径中(基于 lookupDirectories),并在控制台中抛出一个错误,防止应用程序初始化。
提示
您可以查看 INI 配置读取器和 JSON 配置读取器的源代码,以了解如何实现 IConfigurationProvider。
从 JSON 文件读取配置 #
默认情况下,Sisk 提供了一个配置提供者,用于从 JSON 文件读取配置。该文件遵循一个固定的结构,包含以下参数:
{
"Server": {
"DefaultEncoding": "UTF-8",
"ThrowExceptions": true,
"IncludeRequestIdHeader": true
},
"ListeningHost": {
"Label": "My sisk application",
"Ports": [
"http://localhost:80/",
"https://localhost:443/", // 配置文件也支持注释
],
"CrossOriginResourceSharingPolicy": {
"AllowOrigin": "*",
"AllowOrigins": [ "*" ], // 新增于 0.14
"AllowMethods": [ "*" ],
"AllowHeaders": [ "*" ],
"MaxAge": 3600
},
"Parameters": {
"MySqlConnection": "server=localhost;user=root;"
}
}
}从配置文件创建的参数可以在服务器构造函数中访问:
using var app = HttpServer.CreateBuilder()
.UsePortableConfiguration(config =>
{
config.WithParameters(paramCollection =>
{
string databaseConnection = paramCollection.GetValueOrThrow("MySqlConnection");
});
})
.Build();每个配置读取器提供了一种读取服务器初始化参数的方式。一些属性指示应在进程环境中设置,而不是在配置文件中定义,例如敏感的 API 数据、API 密钥等。
配置文件结构 #
JSON 配置文件由以下属性组成:
| 属性 | 必需 | 描述 |
|---|---|---|
| Server | 必需 | 代表服务器本身及其设置。 |
| Server.AccessLogsStream | 可选 | 默认为 console。指定访问日志输出流。可以是文件名、null 或 console。 |
| Server.ErrorsLogsStream | 可选 | 默认为 null。指定错误日志输出流。可以是文件名、null 或 console。 |
| Server.MaximumContentLength | 可选 | 默认为 0。指定最大内容长度(以字节为单位)。零表示无限。 |
| Server.IncludeRequestIdHeader | 可选 | 默认为 false。指定是否应发送 X-Request-Id 标头。 |
| Server.ThrowExceptions | 可选 | 默认为 true。指定是否应抛出未处理的异常。设置为 false 时为生产环境,设置为 true 时为调试环境。 |
| ListeningHost | 必需 | 代表服务器监听主机。 |
| ListeningHost.Label | 可选 | 代表应用程序标签。 |
| ListeningHost.Ports | 必需 | 代表一个字符串数组,匹配 ListeningPort 语法。 |
| ListeningHost.CrossOriginResourceSharingPolicy | 可选 | 设置应用程序的 CORS 标头。 |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowCredentials | 可选 | 默认为 false。指定 Allow-Credentials 标头。 |
| ListeningHost.CrossOriginResourceSharingPolicy.ExposeHeaders | 可选 | 默认为 null。此属性期望一个字符串数组。指定 Expose-Headers 标头。 |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowOrigin | 可选 | 默认为 null。此属性期望一个字符串。指定 Allow-Origin 标头。 |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowOrigins | 可选 | 默认为 null。此属性期望一个字符串数组。指定多个 Allow-Origin 标头。请参阅 AllowOrigins 以获取更多信息。 |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowMethods | 可选 | 默认为 null。此属性期望一个字符串数组。指定 Allow-Methods 标头。 |
| ListeningHost.CrossOriginResourceSharingPolicy.AllowHeaders | 可选 | 默认为 null。此属性期望一个字符串数组。指定 Allow-Headers 标头。 |
| ListeningHost.CrossOriginResourceSharingPolicy.MaxAge | 可选 | 默认为 null。此属性期望一个整数。指定 Max-Age 标头(以秒为单位)。 |
| ListeningHost.Parameters | 可选 | 指定提供给应用程序设置方法的属性。 |