Sisk

Proveedor de configuración INI

Esta página fue traducida automáticamente del inglés. Leer el original

Sisk tiene un método para obtener configuraciones de inicio distintas de JSON. De hecho, cualquier canal que implemente IConfigurationReader puede usarse con PortableConfigurationBuilder.WithConfigurationPipeline, leyendo la configuración del servidor desde cualquier tipo de archivo.

El paquete Sisk.IniConfiguration ofrece un lector de archivos INI basado en streams que no lanza excepciones por errores de sintaxis comunes y posee una sintaxis de configuración sencilla. Este paquete puede usarse fuera del framework Sisk, ofreciendo flexibilidad para proyectos que requieran un lector de documentos INI eficiente.

Instalación #

Para instalar el paquete, puedes comenzar con:

Bash
$ dotnet add package Sisk.IniConfiguration

También puedes instalar el paquete central, que no incluye el INI IConfigurationReader, ni la dependencia de Sisk, solo los serializadores INI:

Bash
$ dotnet add package Sisk.IniConfiguration.Core

Con el paquete principal, puedes usarlo en tu código como se muestra en el ejemplo a continuación:

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

    static void Main(string[] args)
    {
        Host = HttpServer.CreateBuilder()
            .UsePortableConfiguration(config =>
            {
                config.WithConfigFile("app.ini", createIfDontExists: true);
                
                // usa el lector de configuración 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}!");
    }
}

El código anterior buscará un archivo app.ini en el directorio actual del proceso (CurrentDirectory). El archivo INI se ve así:

INI
[Server]
# Se admiten múltiples direcciones de escucha
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 y sintaxis de INI #

Sabor de la implementación actual:

  • Los nombres de propiedades y secciones son insensibles a mayúsculas/minúsculas.
  • Los nombres y valores de las propiedades están recortados, a menos que los valores estén entre comillas.
  • Los valores pueden ir entre comillas simples o dobles. Las comillas pueden contener saltos de línea en su interior.
  • Se admiten comentarios con # y ;. Además, se permiten comentarios al final de la línea.
  • Las propiedades pueden tener múltiples valores.

En detalle, la documentación del “sabor” del analizador INI usado en Sisk está disponible en este documento.

Usando el siguiente código INI como ejemplo:

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

; el código a continuación tiene algunos colores
[some section]
Color = Red
Color = Blue
Color = Yellow ; no usar amarillo

Analízalo con:

C#
// analiza el texto INI desde la cadena
IniDocument doc = IniDocument.FromString(iniText);

// obtener un valor
string? one = doc.Global.GetOne("one");
string? anotherValue = doc.Global.GetOne("another value");

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

Parámetros de configuración #

Sección y nombrePermitir múltiples valoresDescripción
Server.ListenYesDirecciones/puertos de escucha del servidor.
Server.EncodingNoCodificación predeterminada del servidor.
Server.MaximumContentLengthNoTamaño máximo de content-length del servidor en bytes. Cuando se omite, se mantiene la codificación predeterminada del servidor (100 MB desde Sisk 1.7). Usa 0 para sin límite.
Server.IncludeRequestIdHeaderNoEspecifica si el servidor HTTP debe enviar el encabezado X-Request-Id.
Server.ThrowExceptionsNoEspecifica si se deben lanzar excepciones no controladas.
Server.AccessLogsStreamNoEspecifica el stream de salida del registro de accesos.
Server.ErrorsLogsStreamNoEspecifica el stream de salida del registro de errores.
Cors.AllowMethodsNoEspecifica el valor del encabezado CORS Allow-Methods.
Cors.AllowHeadersNoEspecifica el valor del encabezado CORS Allow-Headers.
Cors.AllowOriginsNoEspecifica múltiples encabezados Allow-Origin, separados por comas. AllowOrigins para más información.
Cors.AllowOriginNoEspecifica un encabezado Allow-Origin.
Cors.ExposeHeadersNoEspecifica el valor del encabezado CORS Expose-Headers.
Cors.AllowCredentialsNoEspecifica el valor del encabezado CORS Allow-Credentials.
Cors.MaxAgeNoEspecifica el valor del encabezado CORS Max-Age.

Escribe para buscar en la documentación y en la referencia de la API.