Sisk

Änderungsprotokolle

Diese Seite wurde automatisch aus dem Englischen übersetzt. Original lesen

Jede Änderung an Sisk wird im Änderungsprotokoll festgehalten. Die Änderungsprotokolle für alle Sisk‑Versionen können Sie hier einsehen.

Migration von 1.6 zu 1.7 #

Sisk 1.7.0 liefert Sisk.HttpServer, Sisk.Cadente, Sisk.Cadente.CoreEngine und Sisk.IniConfiguration 1.7.0. Sisk.Documenting, Sisk.Documenting.Html und Sisk.Monitoring werden als 1.7.0-rc3 ausgeliefert, und Sisk.ModelContextProtocol als 1.7.0-rc1. Lesen Sie das vollständige 1.7.0 Änderungsprotokoll für alle Änderungen.

Breaking changes #

  • Route.UseRegex kann nicht mehr gesetzt werden. Die Eigenschaft ist veraltet und gibt nur noch an, ob die Route ein RegexRoute ist. Erstellen Sie stattdessen ein RegexRoute. Route‑Attribute mit UseRegex = true und das [RegexRoute]‑Attribut funktionieren weiterhin. Siehe regex routes.

    C#
    // vorher
    router.Map(new Route(RouteMethod.Get, @"^/items/(?<id>\d+)$", action) { UseRegex = true });
    
    // danach
    router.Map(new RegexRoute(RouteMethod.Get, @"^/items/(?<id>\d+)$", action));
  • Anfragekörper sind standardmäßig auf 100 MB begrenzt. Der Standardwert von HttpServerConfiguration.MaximumContentLength hat sich von 0 (unbegrenzt) auf 100 MB geändert. Die Begrenzung gilt auch für Anforderungs‑Streams und für WebSocket‑Nachrichten. Setzen Sie ihn auf 0, um das frühere Verhalten wiederherzustellen. Siehe getting the request body.

    C#
    using var app = HttpServer.CreateBuilder()
        .UseConfiguration(config => config.MaximumContentLength = 0)
        .Build();
  • Statische Routen werden vor dynamischen Routen getestet. Regex‑Routen, Präfix‑Routen (einschließlich Dateiservern) und benutzerdefinierte Matching‑Routen werden nach jeder statischen Route geprüft, unabhängig von ihrer Registrierungsreihenfolge. Siehe matching precedence.

  • Doppelte Routennamen führen beim Start zu einer Ausnahme. Zwei oder mehr Routen mit demselben Name verursachen eine ArgumentException, wenn der Server startet, während Router.CheckForRouteCollisions aktiviert ist (Standard).

  • Dateiserver‑Routen sind Präfix‑Routen. Router.MapFileSystem und HttpFileServer.CreateServingRoute erzeugen eine PrefixRoute anstelle einer Regex‑Route und werden nicht mehr von ForceTrailingSlash beeinflusst.

  • RouteMethod.Any schließt QUERY ein. Routen, die mit MapAny gemappt werden, beantworten ebenfalls QUERY‑Anfragen. Der numerische Wert von RouteMethod.Any hat sich geändert, daher muss Code, der ihn speichert oder vergleicht, neu kompiliert werden.

  • CORS‑Preflight respektiert UseCors. Die automatische OPTIONS‑Antwort sendet keine CORS‑Header mehr für Routen mit UseCors = false, und explizit für OPTIONS gemappte Routen bearbeiten die Anfrage stattdessen. Siehe preflight requests.

  • Cadente lehnt fehlerhafte Anfragen ab. Ungültige Anfragemethoden und -ziele, nicht unterstützte Transfer-Encoding‑Werte und widersprüchliche Content-Length‑Header werden abgelehnt, und Header‑Blöcke größer als 8 KB erhalten 431 Request Header Fields Too Large. Siehe Cadente request validation.

Eingestellte Pakete #

Sisk.BasicAuth, Sisk.SslProxy und Sisk.ServiceProvider werden nicht mehr gepflegt und sind auf NuGet veraltet, ohne Ersatzpaket. Entfernen Sie sie aus Ihren Projekten:

  • Ersetzen Sie Sisk.BasicAuth durch Ihren eigenen request handler, der den Authorization‑Header validiert.
  • Ersetzen Sie Sisk.SslProxy durch die native SSL‑Unterstützung der Cadente engine.
  • Ersetzen Sie Sisk.ServiceProvider durch die portable configuration, die in Sisk.HttpServer über UsePortableConfiguration integriert ist.

Neue Funktionen #

  • Custom route matching über Route.Match, RouteMatch, Route.IsStatic und Route.AllowRewrites sowie die neuen prefix routes.
  • Unterstützung der HTTP‑QUERY‑Methode mit MapQuery, Route.Query, [RouteQuery] und dem Header Accept-Query.
  • Atomic context values über HttpContext.Interlocked.
  • Der %{$key}‑access log term, der Werte aus dem Request‑Bag ausgibt, sowie die safe file writing helpers LogStream.SafeWriteToFile und LogStream.SafeAppendToFile.
  • In Cadente: pipelined Keep‑Alive‑Anfragen, WriteInlineContent und WriteInlineContentAsync sowie eine Weiterleitung zu HTTPS für reine HTTP‑Anfragen, die an einem SSL‑Port empfangen werden.
  • In den Erweiterungen: Parameterbeispiele und LlmsApiExporter.FooterText in Sisk.Documenting, Skills und die Protokollrevision 2026-07-28 in Sisk.ModelContextProtocol sowie HTTP‑Traffic, Latenz, Routen‑ und Ausnahme‑Telemetry im Sisk.Monitoring‑Dashboard.

Weitere Verhaltensänderungen #

  • Die HttpListener‑Engine verteilt jede Anfrage an den Thread‑Pool, sodass eine langsame Anfrage die nächste akzeptierte Verbindung nicht mehr verzögert. Ihr ContextAbortedToken liefert CancellationToken.None zurück, anstatt eine Ausnahme zu werfen.
  • Ausnahmen, die von Server‑Handlern am Ende einer Anfrage bzw. beim Schreiben von Logs geworfen werden, werden in das Fehler‑Log geschrieben, anstatt an die HTTP‑Engine weiterzureichen. Siehe exceptions thrown by handlers.
  • CORS‑Antworten senden Vary: Origin, wenn die erlaubte Herkunft von der Anfrage abhängt.
  • Der %ri‑Access‑Log‑Term verwendet die Client‑Adresse, die zu Beginn der Anfrage ermittelt wurde.
  • Sisk.HttpServer zielt auf .NET 8, .NET 9 und .NET 10. Sisk.Cadente und Sisk.Cadente.CoreEngine zielen auf .NET 9 und .NET 10 und veröffentlichen ihre Debug‑Symbole als .snupkg‑Pakete.

Tippen, um die Dokumentation und die API-Referenz zu durchsuchen.