# Änderungsprotokolle

Source: https://docs.sisk-framework.org/de/docs/changelogs.html

Jede Änderung an Sisk wird im Änderungsprotokoll festgehalten. Die Änderungsprotokolle für alle Sisk‑Versionen können Sie [hier](https://github.com/sisk-http/archive/tree/master/changelogs) 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](https://github.com/sisk-http/archive/blob/master/changelogs/core/v1.7/v1.7.0.md) 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](https://docs.sisk-framework.org/api/Sisk.Core.Routing.RegexRoute.md). Route‑Attribute mit `UseRegex = true` und das `[RegexRoute]`‑Attribut funktionieren weiterhin. Siehe [regex routes](https://docs.sisk-framework.org/de/docs/fundamentals/routing.md#regex-routes).

    ```cs
    // 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](https://docs.sisk-framework.org/api/Sisk.Core.Http.HttpServerConfiguration.MaximumContentLength.md) 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](https://docs.sisk-framework.org/de/docs/fundamentals/requests.md#getting-the-request-body).

    ```cs
    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](https://docs.sisk-framework.org/de/docs/fundamentals/routing.md#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](https://docs.sisk-framework.org/api/Sisk.Core.Routing.Router.CheckForRouteCollisions.md) aktiviert ist (Standard).

- **Dateiserver‑Routen sind Präfix‑Routen.** `Router.MapFileSystem` und `HttpFileServer.CreateServingRoute` erzeugen eine [PrefixRoute](https://docs.sisk-framework.org/api/Sisk.Core.Routing.PrefixRoute.md) 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](https://docs.sisk-framework.org/de/docs/features/cors.md#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](https://docs.sisk-framework.org/de/docs/cadente.md#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](https://docs.sisk-framework.org/de/docs/fundamentals/request-handlers.md), der den `Authorization`‑Header validiert.
- Ersetzen Sie `Sisk.SslProxy` durch die native SSL‑Unterstützung der [Cadente engine](https://docs.sisk-framework.org/de/docs/cadente.md).
- Ersetzen Sie `Sisk.ServiceProvider` durch die [portable configuration](https://docs.sisk-framework.org/de/docs/extensions/service-providers.md), die in `Sisk.HttpServer` über `UsePortableConfiguration` integriert ist.

### Neue Funktionen

- [Custom route matching](https://docs.sisk-framework.org/de/docs/fundamentals/routing.md#custom-route-matching) über `Route.Match`, `RouteMatch`, `Route.IsStatic` und `Route.AllowRewrites` sowie die neuen [prefix routes](https://docs.sisk-framework.org/de/docs/fundamentals/routing.md#prefix-routes).
- Unterstützung der HTTP‑[QUERY‑Methode](https://docs.sisk-framework.org/de/docs/fundamentals/routing.md#query-method-routes) mit `MapQuery`, `Route.Query`, `[RouteQuery]` und dem Header `Accept-Query`.
- [Atomic context values](https://docs.sisk-framework.org/de/docs/fundamentals/requests.md#atomic-context-values) über `HttpContext.Interlocked`.
- Der `%{$key}`‑[access log term](https://docs.sisk-framework.org/de/docs/features/logging.md#access-log-formatting), der Werte aus dem Request‑Bag ausgibt, sowie die [safe file writing helpers](https://docs.sisk-framework.org/de/docs/features/logging.md#writing-files-safely) `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](https://docs.sisk-framework.org/de/docs/extensions/api-documentation.md), Skills und die Protokollrevision `2026-07-28` in [Sisk.ModelContextProtocol](https://docs.sisk-framework.org/de/docs/extensions/mcp.md) 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](https://docs.sisk-framework.org/de/docs/advanced/http-server-handlers.md#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.
