# Registros de cambios

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

Cada cambio realizado en Sisk se registra en el registro de cambios. Puedes ver los registros de cambios de todas las versiones de Sisk [aquí](https://github.com/sisk-http/archive/tree/master/changelogs).

## Migración de 1.6 a 1.7

Sisk 1.7.0 incluye `Sisk.HttpServer`, `Sisk.Cadente`, `Sisk.Cadente.CoreEngine` y `Sisk.IniConfiguration` 1.7.0. `Sisk.Documenting`, `Sisk.Documenting.Html` y `Sisk.Monitoring` se entregan como 1.7.0-rc3, y `Sisk.ModelContextProtocol` como 1.7.0-rc1. Lee el [registro de cambios completo de 1.7.0](https://github.com/sisk-http/archive/blob/master/changelogs/core/v1.7/v1.7.0.md) para cada cambio.

### Cambios incompatibles

- **`Route.UseRegex` ya no se puede establecer.** La propiedad está obsoleta y solo indica si la ruta es un `RegexRoute`. Crea un [RegexRoute](https://docs.sisk-framework.org/api/Sisk.Core.Routing.RegexRoute.md) en su lugar. Los atributos de ruta con `UseRegex = true` y el atributo `[RegexRoute]` siguen funcionando. Ver [regex routes](https://docs.sisk-framework.org/es/docs/fundamentals/routing.md#regex-routes).

    ```cs
    // antes
    router.Map(new Route(RouteMethod.Get, @"^/items/(?<id>\d+)$", action) { UseRegex = true });

    // después
    router.Map(new RegexRoute(RouteMethod.Get, @"^/items/(?<id>\d+)$", action));
    ```

- **Los cuerpos de solicitud están limitados a 100 MB por defecto.** El valor predeterminado de [HttpServerConfiguration.MaximumContentLength](https://docs.sisk-framework.org/api/Sisk.Core.Http.HttpServerConfiguration.MaximumContentLength.md) cambió de `0` (ilimitado) a 100 MB. El límite también se aplica a los flujos de solicitud y a los mensajes WebSocket. Establécelo en `0` para restaurar el comportamiento anterior. Consulta [obtener el cuerpo de la solicitud](https://docs.sisk-framework.org/es/docs/fundamentals/requests.md#getting-the-request-body).

    ```cs
    using var app = HttpServer.CreateBuilder()
        .UseConfiguration(config => config.MaximumContentLength = 0)
        .Build();
    ```

- **Las rutas estáticas se prueban antes que las rutas dinámicas.** Las rutas Regex, rutas de prefijo (incluidos los servidores de archivos) y rutas de coincidencia personalizada se prueban después de cada ruta estática, sin importar el orden de registro. Ver [precedencia de coincidencia](https://docs.sisk-framework.org/es/docs/fundamentals/routing.md#matching-precedence).

- **Los nombres de ruta duplicados provocan una excepción al iniciar.** Dos o más rutas con el mismo `Name` generan una `ArgumentException` cuando el servidor se inicia, mientras que [Router.CheckForRouteCollisions](https://docs.sisk-framework.org/api/Sisk.Core.Routing.Router.CheckForRouteCollisions.md) está habilitado (por defecto).

- **Las rutas del servidor de archivos son rutas de prefijo.** `Router.MapFileSystem` y `HttpFileServer.CreateServingRoute` crean una [PrefixRoute](https://docs.sisk-framework.org/api/Sisk.Core.Routing.PrefixRoute.md) en lugar de una ruta regex, y ya no se ven afectadas por `ForceTrailingSlash`.

- **`RouteMethod.Any` incluye `QUERY`.** Las rutas mapeadas con `MapAny` también responden a solicitudes `QUERY`. El valor numérico de `RouteMethod.Any` cambió, por lo que debes recompilar el código que lo almacena o lo compara.

- **La preflight de CORS respeta `UseCors`.** La respuesta automática `OPTIONS` ya no envía encabezados CORS para rutas con `UseCors = false`, y las rutas mapeadas explícitamente para `OPTIONS` manejan la solicitud en su lugar. Ver [solicitudes de preflight](https://docs.sisk-framework.org/es/docs/features/cors.md#preflight-requests).

- **Cadente rechaza solicitudes malformadas.** Los métodos y destinos de solicitud no válidos, los valores no compatibles de `Transfer-Encoding` y los encabezados `Content-Length` conflictivos son rechazados, y los bloques de encabezado mayores de 8 KB reciben `431 Request Header Fields Too Large`. Ver [validación de solicitudes de Cadente](https://docs.sisk-framework.org/es/docs/cadente.md#request-validation).

### Paquetes descontinuados

`Sisk.BasicAuth`, `Sisk.SslProxy` y `Sisk.ServiceProvider` ya no se mantienen y están obsoletos en NuGet, sin paquete de reemplazo. Elimínalos de tus proyectos:

- Reemplaza `Sisk.BasicAuth` con tu propio [manejador de solicitudes](https://docs.sisk-framework.org/es/docs/fundamentals/request-handlers.md) que valide el encabezado `Authorization`.
- Reemplaza `Sisk.SslProxy` con el soporte SSL nativo del [motor Cadente](https://docs.sisk-framework.org/es/docs/cadente.md).
- Reemplaza `Sisk.ServiceProvider` con la [configuración portable](https://docs.sisk-framework.org/es/docs/extensions/service-providers.md) incorporada en `Sisk.HttpServer` mediante `UsePortableConfiguration`.

### Nuevas características

- [Coincidencia de rutas personalizada](https://docs.sisk-framework.org/es/docs/fundamentals/routing.md#custom-route-matching) a través de `Route.Match`, `RouteMatch`, `Route.IsStatic` y `Route.AllowRewrites`, y las nuevas [rutas de prefijo](https://docs.sisk-framework.org/es/docs/fundamentals/routing.md#prefix-routes).
- Soporte para el [método QUERY] HTTP con `MapQuery`, `Route.Query`, `[RouteQuery]` y el encabezado `Accept-Query`.
- [Valores atómicos de contexto](https://docs.sisk-framework.org/es/docs/fundamentals/requests.md#atomic-context-values) a través de `HttpContext.Interlocked`.
- El término de registro de acceso `%{$key}` [término de registro de acceso](https://docs.sisk-framework.org/es/docs/features/logging.md#access-log-formatting), que imprime valores del contenedor de solicitud, y los [helpers de escritura segura de archivos](https://docs.sisk-framework.org/es/docs/features/logging.md#writing-files-safely) `LogStream.SafeWriteToFile` y `LogStream.SafeAppendToFile`.
- En Cadente: solicitudes keep-alive en pipeline, `WriteInlineContent` y `WriteInlineContentAsync`, y una redirección a HTTPS para solicitudes HTTP simples recibidas en un puerto SSL.
- En las extensiones: ejemplos de parámetros y `LlmsApiExporter.FooterText` en [Sisk.Documenting](https://docs.sisk-framework.org/es/docs/extensions/api-documentation.md), habilidades y la revisión de protocolo `2026-07-28` en [Sisk.ModelContextProtocol](https://docs.sisk-framework.org/es/docs/extensions/mcp.md), y telemetría de tráfico HTTP, latencia, rutas y excepciones en el panel de Sisk.Monitoring.

### Otros cambios de comportamiento

- El motor `HttpListener` envía cada solicitud al pool de hilos, por lo que una solicitud lenta ya no retrasa la siguiente conexión aceptada. Su `ContextAbortedToken` devuelve `CancellationToken.None` en lugar de lanzar una excepción.
- Las excepciones lanzadas por los manejadores del servidor al final de una solicitud, y al escribir registros, se escriben en el registro de errores en lugar de propagarse al motor HTTP. Ver [excepciones lanzadas por los manejadores](https://docs.sisk-framework.org/es/docs/advanced/http-server-handlers.md#exceptions-thrown-by-handlers).
- Las respuestas CORS envían `Vary: Origin` cuando el origen permitido depende de la solicitud.
- El término de registro de acceso `%ri` utiliza la dirección del cliente resuelta al inicio de la solicitud.
- `Sisk.HttpServer` tiene como objetivo .NET 8, .NET 9 y .NET 10. `Sisk.Cadente` y `Sisk.Cadente.CoreEngine` tienen como objetivo .NET 9 y .NET 10 y publican sus símbolos de depuración como paquetes `.snupkg`.
