Sisk

Provedor de configuração INI

Esta página foi traduzida automaticamente do inglês. Ler o original

Sisk possui um método para obter configurações de inicialização diferentes de JSON. Na verdade, qualquer pipeline que implemente IConfigurationReader pode ser usado com PortableConfigurationBuilder.WithConfigurationPipeline, lendo a configuração do servidor a partir de qualquer tipo de arquivo.

O pacote Sisk.IniConfiguration fornece um leitor de arquivos INI baseado em stream que não lança exceções para erros de sintaxe comuns e possui uma sintaxe de configuração simples. Este pacote pode ser usado fora do framework Sisk, oferecendo flexibilidade para projetos que necessitam de um leitor de documentos INI eficiente.

Instalação #

Para instalar o pacote, você pode começar com:

Bash
$ dotnet add package Sisk.IniConfiguration

Você também pode instalar o pacote core, que não inclui o INI IConfigurationReader, nem a dependência do Sisk, apenas os serializadores INI:

Bash
$ dotnet add package Sisk.IniConfiguration.Core

Com o pacote principal, você pode usá-lo em seu código como mostrado no exemplo abaixo:

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

    static void Main(string[] args)
    {
        Host = HttpServer.CreateBuilder()
            .UsePortableConfiguration(config =>
            {
                config.WithConfigFile("app.ini", createIfDontExists: true);
                
                // usa o leitor de configuração 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}!");
    }
}

O código acima procurará um arquivo app.ini no diretório atual do processo (CurrentDirectory). O arquivo INI tem a seguinte aparência:

INI
[Server]
# Vários endereços de escuta são suportados
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"

Sabor e sintaxe do INI #

Sabor da implementação atual:

  • Propriedades e nomes de seção não diferenciam maiúsculas de minúsculas.
  • Nomes e valores de propriedades são removidos de espaços em branco, a menos que os valores estejam entre aspas.
  • Valores podem ser citados com aspas simples ou duplas. As aspas podem conter quebras de linha dentro delas.
  • Comentários são suportados com # e ;. Além disso, comentários ao final da linha são permitidos.
  • Propriedades podem ter múltiplos valores.

Em detalhes, a documentação sobre o “sabor” do analisador INI usado no Sisk está disponível neste documento.

Usando o código INI a seguir como exemplo:

INI
One = 1
Value = this is an value
Another value = "this value
    has an line break on it"

; o código abaixo tem algumas cores
[some section]
Color = Red
Color = Blue
Color = Yellow ; não use amarelo

Analise-o com:

C#
// analisa o texto INI a partir da string
IniDocument doc = IniDocument.FromString(iniText);

// obtém um valor
string? one = doc.Global.GetOne("one");
string? anotherValue = doc.Global.GetOne("another value");

// obtém múltiplos valores
string[]? colors = doc.GetSection("some section")?.GetMany("color");

Parâmetros de configuração #

Seção e nomePermitir múltiplos valoresDescrição
Server.ListenSimOs endereços/portas de escuta do servidor.
Server.EncodingNãoA codificação padrão do servidor.
Server.MaximumContentLengthNãoO tamanho máximo de content-length do servidor em bytes. Quando omitido, o padrão do servidor é mantido (100 MB desde o Sisk 1.7). Use 0 para nenhum limite.
Server.IncludeRequestIdHeaderNãoEspecifica se o servidor HTTP deve enviar o cabeçalho X-Request-Id.
Server.ThrowExceptionsNãoEspecifica se exceções não tratadas devem ser lançadas.
Server.AccessLogsStreamNãoEspecifica o stream de saída do log de acesso.
Server.ErrorsLogsStreamNãoEspecifica o stream de saída do log de erros.
Cors.AllowMethodsNãoEspecifica o valor do cabeçalho CORS Allow-Methods.
Cors.AllowHeadersNãoEspecifica o valor do cabeçalho CORS Allow-Headers.
Cors.AllowOriginsNãoEspecifica múltiplos cabeçalhos Allow-Origin, separados por vírgulas. AllowOrigins para mais informações.
Cors.AllowOriginNãoEspecifica um cabeçalho Allow-Origin.
Cors.ExposeHeadersNãoEspecifica o valor do cabeçalho CORS Expose-Headers.
Cors.AllowCredentialsNãoEspecifica o valor do cabeçalho CORS Allow-Credentials.
Cors.MaxAgeNãoEspecifica o valor do cabeçalho CORS Max-Age.

Digite para pesquisar na documentação e na referência da API.