Sisk

更新日志

本页由英文自动翻译。 阅读原文

每一次对 Sisk 的更改都记录在更新日志中。您可以在此处查看所有 Sisk 版本的更新日志。

从 1.6 迁移到 1.7 #

Sisk 1.7.0 包含 Sisk.HttpServer、Sisk.Cadente、Sisk.Cadente.CoreEngine 和 Sisk.IniConfiguration 1.7.0。Sisk.Documenting、Sisk.Documenting.Html 和 Sisk.Monitoring 以 1.7.0-rc3 发行,Sisk.ModelContextProtocol 为 1.7.0-rc1。请阅读完整的 1.7.0 更新日志了解所有更改。

破坏性更改 #

  • Route.UseRegex 不能再被设置。 此属性已废弃,仅用于报告路由是否为 RegexRoute。请改为创建一个 RegexRoute。带有 UseRegex = true 的路由属性和 [RegexRoute] 特性仍然可用。参见正则路由。

    C#
    // 之前
    router.Map(new Route(RouteMethod.Get, @"^/items/(?<id>\d+)$", action) { UseRegex = true });
    
    // 之后
    router.Map(new RegexRoute(RouteMethod.Get, @"^/items/(?<id>\d+)$", action));
  • 请求体默认限制为 100 MB。 HttpServerConfiguration.MaximumContentLength 的默认值已从 0(无限制)改为 100 MB。此限制同样适用于请求流和 WebSocket 消息。将其设为 0 可恢复之前的行为。参见获取请求体。

    C#
    using var app = HttpServer.CreateBuilder()
        .UseConfiguration(config => config.MaximumContentLength = 0)
        .Build();
  • 静态路由在动态路由之前进行匹配。 正则路由、前缀路由(包括文件服务器)以及自定义匹配路由会在每个静态路由之后进行测试,且不受注册顺序影响。参见匹配优先级。

  • 重复的路由名称将在启动时抛出异常。 当服务器启动时,如果有两个或以上具有相同 Name 的路由,将触发 ArgumentException,前提是已启用 Router.CheckForRouteCollisions(默认开启)。

  • 文件服务器路由是前缀路由。 Router.MapFileSystem 和 HttpFileServer.CreateServingRoute 会创建一个 PrefixRoute 而非正则路由,并且不再受 ForceTrailingSlash 的影响。

  • RouteMethod.Any 包含 QUERY。 使用 MapAny 映射的路由同样会响应 QUERY 请求。RouteMethod.Any 的数值已更改,请重新编译使用或比较该值的代码。

  • CORS 预检遵循 UseCors。 自动的 OPTIONS 响应不再为 UseCors = false 的路由发送 CORS 头部,而显式映射的 OPTIONS 路由会自行处理该请求。参见预检请求。

  • Cadente 拒绝格式错误的请求。 无效的请求方法和目标、不受支持的 Transfer-Encoding 值以及冲突的 Content-Length 头部都会被拒绝,且大于 8 KB 的头部块会返回 431 Request Header Fields Too Large。参见Cadente 请求验证。

已停止维护的包 #

Sisk.BasicAuth、Sisk.SslProxy 和 Sisk.ServiceProvider 已不再维护,并在 NuGet 上标记为已弃用,且没有替代包。请从项目中移除它们:

  • 用您自己的请求处理程序替代 Sisk.BasicAuth,自行验证 Authorization 头部。
  • 用 Cadente 引擎 的原生 SSL 支持替代 Sisk.SslProxy。
  • 用 Sisk.HttpServer 通过 UsePortableConfiguration 内置的可移植配置替代 Sisk.ServiceProvider。

新特性 #

  • 通过 Route.Match、RouteMatch、Route.IsStatic 和 Route.AllowRewrites 实现自定义路由匹配,以及新的前缀路由。
  • 支持 HTTP QUERY 方法,使用 MapQuery、Route.Query、[RouteQuery] 和 Accept-Query 头部。
  • 通过 HttpContext.Interlocked 实现原子上下文值。
  • %{$key} 访问日志项,用于打印请求包的值;以及安全文件写入帮助方法 LogStream.SafeWriteToFile 和 LogStream.SafeAppendToFile。
  • 在 Cadente 中:管道化的 keep-alive 请求、WriteInlineContent 与 WriteInlineContentAsync,以及对在 SSL 端口上收到的普通 HTTP 请求进行 HTTPS 重定向。
  • 在扩展中:参数示例和 LlmsApiExporter.FooterText(位于 Sisk.Documenting),技能以及 2026-07-28 协议修订(位于 Sisk.ModelContextProtocol),以及在 Sisk.Monitoring 仪表盘中的 HTTP 流量、延迟、路由和异常遥测。

其他行为更改 #

  • HttpListener 引擎会将每个请求分派到线程池,因此慢请求不再阻塞下一个接受的连接。其 ContextAbortedToken 现在返回 CancellationToken.None 而不是抛出异常。
  • 在请求结束时以及写入日志时,由服务器处理程序抛出的异常会写入错误日志,而不是逃逸到 HTTP 引擎。参见处理程序抛出的异常。
  • 当允许的来源取决于请求时,CORS 响应会发送 Vary: Origin。
  • %ri 访问日志项使用请求开始时解析的客户端地址。
  • Sisk.HttpServer 目标为 .NET 8、.NET 9 和 .NET 10。Sisk.Cadente 与 Sisk.Cadente.CoreEngine 目标为 .NET 9 和 .NET 10,并将其调试符号以 .snupkg 包形式发布。

输入关键词以搜索文档和 API 参考。