Sisk

Провайдер конфигурации INI

Эта страница переведена с английского автоматически. Читать оригинал

Sisk имеет метод для получения конфигураций запуска, отличных от JSON. На самом деле, любой конвейер, реализующий IConfigurationReader, может быть использован с PortableConfigurationBuilder.WithConfigurationPipeline, читая конфигурацию сервера из любого типа файла.

Пакет Sisk.IniConfiguration предоставляет потоковый читатель файлов INI, который не выбрасывает исключения для обычных синтаксических ошибок и имеет простой синтаксис конфигурации. Этот пакет можно использовать вне рамок фреймворка Sisk, предлагая гибкость для проектов, требующих эффективного читателя документов INI.

Установка #

Чтобы установить пакет, можно начать с:

Bash
$ dotnet add package Sisk.IniConfiguration

Также можно установить основной пакет, который не включает в себя INI IConfigurationReader, ни зависимость от Sisk, только сериализаторы INI:

Bash
$ dotnet add package Sisk.IniConfiguration.Core

С основным пакетом можно использовать его в коде, как показано в примере ниже:

C#
class Program
{
    static HttpServerHostContext Host = null!;

    static void Main(string[] args)
    {
        Host = HttpServer.CreateBuilder()
            .UsePortableConfiguration(config =>
            {
                config.WithConfigFile("app.ini", createIfDontExists: true);
                
                // использует конфигурационный читатель IniConfigurationReader
                config.WithConfigurationPipeline<IniConfigurationReader>();
            })
            .UseRouter(r =>
            {
                r.MapGet("/", SayHello);
            })
            .Build();
        
        Host.Start();
    }

    static HttpResponse SayHello(HttpRequest request)
    {
        string? name = Host.Parameters["name"] ?? "world";
        return new HttpResponse($"Hello, {name}!");
    }
}

Код выше будет искать файл app.ini в текущем каталоге процесса (CurrentDirectory). Файл INI выглядит так:

INI
[Server]
# Множественные адреса прослушивания поддерживаются
Listen = http://localhost:5552/
Listen = http://localhost:5553/
ThrowExceptions = false
AccessLogsStream = console

[Cors]
AllowMethods = GET, POST
AllowHeaders = Content-Type, Authorization
AllowOrigin = *

[Parameters]
Name = "Kanye West"

Вкус и синтаксис INI #

Текущая реализация вкуса:

  • Имена свойств и секций не чувствительны к регистру.
  • Имена свойств и значения обрезаются, если значения не заключены в кавычки.
  • Значения можно заключать в одинарные или двойные кавычки. Кавычки могут содержать переносы строк внутри себя.
  • Комментарии поддерживаются с помощью # и ;. Также допускаются комментарии в конце строки.
  • Свойства могут иметь несколько значений.

В подробностях документация для “вкуса” парсера INI, используемого в Sisk, доступна в этом документе.

Используя следующий код INI в качестве примера:

INI
One = 1
Value = это значение
Another value = "это значение
    имеет перенос строки"
; код ниже имеет некоторые цвета
[some section]
Color = Red
Color = Blue
Color = Yellow ; не используйте желтый

Парсить его можно с помощью:

C#
// парсить текст INI из строки
IniDocument doc = IniDocument.FromString(iniText);

// получить одно значение
string? one = doc.Global.GetOne("one");
string? anotherValue = doc.Global.GetOne("another value");

// получить несколько значений
string[]? colors = doc.GetSection("some section")?.GetMany("color");

Параметры конфигурации #

Секция и имяРазрешить несколько значенийОписание
Server.ListenДаАдреса/порт прослушивания сервера.
Server.EncodingНетКодировка сервера по умолчанию.
Server.MaximumContentLengthНетМаксимальный размер контента в байтах.
Server.IncludeRequestIdHeaderНетУказывает, должен ли HTTP-сервер отправлять заголовок X-Request-Id.
Server.ThrowExceptionsНетУказывает, должны ли быть выброшены необработанные исключения.
Server.AccessLogsStreamНетУказывает поток вывода журнала доступа.
Server.ErrorsLogsStreamНетУказывает поток вывода журнала ошибок.
Cors.AllowMethodsНетУказывает значение заголовка CORS Allow-Methods.
Cors.AllowHeadersНетУказывает значение заголовка CORS Allow-Headers.
Cors.AllowOriginsНетУказывает несколько заголовков Allow-Origin, разделенных запятыми. AllowOrigins для более подробной информации.
Cors.AllowOriginНетУказывает один заголовок Allow-Origin.
Cors.ExposeHeadersНетУказывает значение заголовка CORS Expose-Headers.
Cors.AllowCredentialsНетУказывает значение заголовка CORS Allow-Credentials.
Cors.MaxAgeНетУказывает значение заголовка CORS Max-Age.

Sisk распространяется с открытым исходным кодом по лицензии MIT.

Начните вводить, чтобы искать по документации и справочнику API.