服务提供者
本页由英文自动翻译。 阅读原文
Service Providers 是一种将你的 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/", // Configuration files also support comments
],
"CrossOriginResourceSharingPolicy": {
"AllowOrigin": "*",
"AllowOrigins": [ "*" ], // new on 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 对象存在且未设置此属性时,值为 0(无限),这会覆盖 HttpServerConfiguration.MaximumContentLength 的 100 MB 默认值。 |
| Server.IncludeRequestIdHeader | 可选 | 默认值为 false。指定 HTTP 服务器是否应发送 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 | 可选 | 指定提供给应用程序设置方法的属性。 |