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] продолжают работать. См. regex routes.

    C#
    // до
    router.Map(new Route(RouteMethod.Get, @"^/items/(?<id>\d+)$", action) { UseRegex = true });
    
    // после
    router.Map(new RegexRoute(RouteMethod.Get, @"^/items/(?<id>\d+)$", action));
  • Тела запросов по умолчанию ограничены 100 МБ. Значение по умолчанию HttpServerConfiguration.MaximumContentLength изменилось с 0 (неограниченно) на 100 МБ. Ограничение также применяется к потокам запросов и сообщениям WebSocket. Установите 0, чтобы восстановить прежнее поведение. См. getting the request body.

    C#
    using var app = HttpServer.CreateBuilder()
        .UseConfiguration(config => config.MaximumContentLength = 0)
        .Build();
  • Статические маршруты проверяются до динамических маршрутов. Маршруты с регулярными выражениями, префиксные маршруты (включая файловые серверы) и пользовательские маршруты проверяются после каждого статического маршрута, независимо от порядка их регистрации. См. matching precedence.

  • Повторяющиеся имена маршрутов вызывают исключение при запуске. Два или более маршрутов с одинаковым Name вызывают ArgumentException при старте сервера, если включена Router.CheckForRouteCollisions (по умолчанию).

  • Маршруты файлового сервера являются префиксными маршрутами. Router.MapFileSystem и HttpFileServer.CreateServingRoute создают PrefixRoute вместо маршрута с регулярным выражением и больше не зависят от ForceTrailingSlash.

  • RouteMethod.Any включает QUERY. Маршруты, сопоставленные с MapAny, также отвечают на запросы QUERY. Числовое значение RouteMethod.Any изменилось, поэтому пересоберите код, который сохраняет или сравнивает его.

  • Предварительные CORS‑запросы учитывают UseCors. Автоматический ответ OPTIONS больше не отправляет заголовки CORS для маршрутов с UseCors = false, а маршруты, явно сопоставленные для OPTIONS, обрабатывают запрос сами. См. preflight requests.

  • Cadente отклоняет некорректные запросы. Неправильные методы запросов и цели, неподдерживаемые значения Transfer-Encoding и конфликтующие заголовки Content-Length отклоняются, а блоки заголовков более 8 KB получают 431 Request Header Fields Too Large. См. Cadente request validation.

Прекращённые пакеты #

Sisk.BasicAuth, Sisk.SslProxy и Sisk.ServiceProvider больше не поддерживаются и помечены как устаревшие в NuGet, без заменяющего пакета. Удалите их из ваших проектов:

Новые возможности #

Другие изменения поведения #

  • Движок HttpListener распределяет каждый запрос в пул потоков, поэтому медленный запрос больше не задерживает следующую принятые соединение. Его ContextAbortedToken возвращает CancellationToken.None вместо выброса исключения.
  • Исключения, выброшенные обработчиками сервера в конце запроса и при записи логов, записываются в журнал ошибок вместо того, чтобы «выскочить» в HTTP‑движок. См. exceptions thrown by handlers.
  • Ответы CORS отправляют Vary: Origin, когда разрешённый источник зависит от запроса.
  • Термин доступа %ri использует клиентский адрес, определённый в начале запроса.
  • Sisk.HttpServer нацелен на .NET 8, .NET 9 и .NET 10. Sisk.Cadente и Sisk.Cadente.CoreEngine нацелены на .NET 9 и .NET 10 и публикуют свои отладочные символы как пакеты .snupkg.

Sisk распространяется с открытым исходным кодом по лицензии MIT.

Начните вводить, чтобы искать по документации и справочнику API.