Sisk

服务提供者

本页由英文自动翻译。 阅读原文

服务提供者是一种将 Sisk 应用程序移植到不同环境的方式,使用可移植的配置文件。该功能允许您在不修改应用程序代码的情况下更改服务器端口、参数和其他选项。该模块依赖于 Sisk 构造语法,可以通过 UsePortableConfiguration 方法进行配置。

一个配置提供者是通过 IConfigurationProvider 实现的,它提供了一个配置读取器,可以接收任何实现。默认情况下,Sisk 提供了一个 JSON 配置读取器,但也有一个用于 INI 文件的包。您也可以创建自己的配置提供者并注册它:

C#
using var app = HttpServer.CreateBuilder()
    .UsePortableConfiguration(config =>
    {
        config.WithConfigReader<MyConfigurationReader>();
    })
    .Build();

如前所述,默认提供者是一个 JSON 文件。默认情况下,文件名为 service-config.json,它在运行进程的当前目录中搜索,而不是可执行文件目录。

您可以选择更改文件名,以及 Sisk 应该在哪里查找配置文件:

C#
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 文件读取配置。该文件遵循一个固定的结构,包含以下参数:

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;"
        }
    }
}

从配置文件创建的参数可以在服务器构造函数中访问:

C#
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可选指定提供给应用程序设置方法的属性。

输入关键词以搜索文档和 API 参考。