Sisk

服务提供者

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

Service Providers 是一种将你的 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/",  // Configuration files also support comments
        ],
        "CrossOriginResourceSharingPolicy": {
            "AllowOrigin": "*",
            "AllowOrigins": [ "*" ],   // new on 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 对象存在且未设置此属性时,值为 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可选指定提供给应用程序设置方法的属性。

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