Sisk

Registros de alterações

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

Todas as alterações feitas no Sisk são registradas no changelog. Você pode ver os changelogs de todas as versões do Sisk aqui.

Migrando da 1.6 para a 1.7 #

O Sisk 1.7.0 inclui Sisk.HttpServer, Sisk.Cadente, Sisk.Cadente.CoreEngine e Sisk.IniConfiguration 1.7.0. Sisk.Documenting, Sisk.Documenting.Html e Sisk.Monitoring são distribuídos como 1.7.0-rc3, e Sisk.ModelContextProtocol como 1.7.0-rc1. Leia o full 1.7.0 changelog para cada alteração.

Alterações críticas #

  • Route.UseRegex não pode mais ser definido. A propriedade está obsoleta e apenas indica se a rota é um RegexRoute. Crie um RegexRoute em vez disso. Atributos de rota com UseRegex = true e o atributo [RegexRoute] continuam funcionando. Veja regex routes.

    C#
    // antes
    router.Map(new Route(RouteMethod.Get, @"^/items/(?<id>\d+)$", action) { UseRegex = true });
    
    // depois
    router.Map(new RegexRoute(RouteMethod.Get, @"^/items/(?<id>\d+)$", action));
  • Corpos de requisição são limitados a 100 MB por padrão. O valor padrão de HttpServerConfiguration.MaximumContentLength mudou de 0 (ilimitado) para 100 MB. O limite também se aplica a fluxos de requisição e a mensagens WebSocket. Defina como 0 para restaurar o comportamento anterior. Veja getting the request body.

    C#
    using var app = HttpServer.CreateBuilder()
        .UseConfiguration(config => config.MaximumContentLength = 0)
        .Build();
  • Rotas estáticas são testadas antes das rotas dinâmicas. Rotas regex, rotas de prefixo (incluindo servidores de arquivos) e rotas de correspondência personalizada são testadas após cada rota estática, independentemente da ordem de registro. Veja matching precedence.

  • Nomes de rotas duplicados lançam exceção na inicialização. Duas ou mais rotas com o mesmo Name provocam um ArgumentException quando o servidor inicia, enquanto Router.CheckForRouteCollisions está habilitado (padrão).

  • Rotas de servidor de arquivos são rotas de prefixo. Router.MapFileSystem e HttpFileServer.CreateServingRoute criam um PrefixRoute em vez de uma rota regex, e não são mais afetadas por ForceTrailingSlash.

  • RouteMethod.Any inclui QUERY. Rotas mapeadas com MapAny também respondem a requisições QUERY. O valor numérico de RouteMethod.Any mudou, portanto recompile o código que o armazena ou compara.

  • Preflight CORS respeita UseCors. A resposta automática OPTIONS não envia mais cabeçalhos CORS para rotas com UseCors = false, e rotas explicitamente mapeadas para OPTIONS tratam a requisição. Veja preflight requests.

  • Cadente rejeita requisições malformadas. Métodos e alvos de requisição inválidos, valores não suportados de Transfer-Encoding e cabeçalhos Content-Length conflitantes são rejeitados, e blocos de cabeçalho maiores que 8 KB recebem 431 Request Header Fields Too Large. Veja Cadente request validation.

Pacotes descontinuados #

Sisk.BasicAuth, Sisk.SslProxy e Sisk.ServiceProvider não são mais mantidos e estão obsoletos no NuGet, sem pacote substituto. Remova-os dos seus projetos:

  • Substitua Sisk.BasicAuth por seu próprio request handler que valida o cabeçalho Authorization.
  • Substitua Sisk.SslProxy pelo suporte SSL nativo do engine Cadente.
  • Substitua Sisk.ServiceProvider pela portable configuration incorporada ao Sisk.HttpServer via UsePortableConfiguration.

Novos recursos #

  • Correspondência de rotas personalizada através de Route.Match, RouteMatch, Route.IsStatic e Route.AllowRewrites, e as novas rotas de prefixo.
  • Suporte ao método HTTP QUERY com MapQuery, Route.Query, [RouteQuery] e o cabeçalho Accept-Query.
  • Valores de contexto atômicos através de HttpContext.Interlocked.
  • O termo de log de acesso %{$key} access log term, que imprime valores do saco de requisição, e os helpers seguros de gravação de arquivos LogStream.SafeWriteToFile e LogStream.SafeAppendToFile.
  • No Cadente: requisições keep-alive em pipeline, WriteInlineContent e WriteInlineContentAsync, e um redirecionamento para HTTPS para requisições HTTP simples recebidas em uma porta SSL.
  • Nas extensões: exemplos de parâmetros e LlmsApiExporter.FooterText em Sisk.Documenting, habilidades e a revisão de protocolo 2026-07-28 em Sisk.ModelContextProtocol, e telemetria de tráfego HTTP, latência, rotas e exceções no painel Sisk.Monitoring.

Outras alterações de comportamento #

  • O motor HttpListener despacha cada requisição para o pool de threads, portanto uma requisição lenta não atrasa mais a próxima conexão aceita. Seu ContextAbortedToken retorna CancellationToken.None em vez de lançar exceção.
  • Exceções lançadas pelos manipuladores do servidor ao final de uma requisição, e ao gravar logs, são escritas no log de erros em vez de escaparem para o motor HTTP. Veja exceptions thrown by handlers.
  • Respostas CORS enviam Vary: Origin quando a origem permitida depende da requisição.
  • O termo de log de acesso %ri usa o endereço do cliente resolvido no início da requisição.
  • Sisk.HttpServer tem como alvo .NET 8, .NET 9 e .NET 10. Sisk.Cadente e Sisk.Cadente.CoreEngine têm como alvo .NET 9 e .NET 10 e publicam seus símbolos de depuração como pacotes .snupkg.

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