Новые возможности ASP.NET Core 2.2What's new in ASP.NET Core 2.2

В этой статье описываются наиболее важные изменения в ASP.NET Core 2.2 со ссылками на соответствующую документацию.This article highlights the most significant changes in ASP.NET Core 2.2, with links to relevant documentation.

Соглашения и анализаторы OpenAPIOpenAPI Analyzers & Conventions

OpenAPI (ранее Swagger) — это не зависящая от языка спецификация для описания REST API.OpenAPI (formerly known as Swagger) is a language-agnostic specification for describing REST APIs. В экосистеме OpenAPI представлены средства для обнаружения, тестирования и создания кода клиента в соответствии со спецификацией.The OpenAPI ecosystem has tools that allow for discovering, testing, and producing client code using the specification. Поддержка создания и визуализации документов OpenAPI в ASP.NET Core MVC обеспечивается за счет управляемых сообществом проектов, таких как NSwag и Swashbuckle.AspNetCore.Support for generating and visualizing OpenAPI documents in ASP.NET Core MVC is provided via community driven projects such as NSwag and Swashbuckle.AspNetCore. В ASP.NET Core 2.2 представлены улучшенные средства и возможности среды выполнения для создания документов OpenAPI.ASP.NET Core 2.2 provides improved tooling and runtime experiences for creating OpenAPI documents.

Дополнительные сведения см. в следующих ресурсах:For more information, see the following resources:

Поддержка сведений о проблемеProblem details support

В ASP.NET Core 2.1 появился объект ProblemDetails, основанный на спецификации RFC 7807 и предназначенный для передачи сведений об ошибке в составе HTTP-ответа.ASP.NET Core 2.1 introduced ProblemDetails, based on the RFC 7807 specification for carrying details of an error with an HTTP Response. В версии 2.2 ProblemDetails является стандартным ответом для кодов ошибок клиента в контроллерах с атрибутами ApiControllerAttribute.In 2.2, ProblemDetails is the standard response for client error codes in controllers attributed with ApiControllerAttribute. IActionResult, возвращающий код состояния ошибки клиента (4xx), теперь возвращает текст ProblemDetails.An IActionResult returning a client error status code (4xx) now returns a ProblemDetails body. В результат также включается идентификатор корреляции, который может использоваться для сопоставления ошибки с помощью журналов запросов.The result also includes a correlation ID that can be used to correlate the error using request logs. В отношении ошибок клиентов ProducesResponseType по умолчанию использует тип ответа ProblemDetails.For client errors, ProducesResponseType defaults to using ProblemDetails as the response type. Это описывается в выходных данных Open API (Swagger), создаваемых с помощью NSwag или Swashbuckle.AspNetCore.This is documented in OpenAPI / Swagger output generated using NSwag or Swashbuckle.AspNetCore.

Маршрутизация конечных точекEndpoint Routing

В ASP.NET Core 2.2 используется новая система маршрутизации конечных точек, обеспечивающая оптимизированную диспетчеризацию запросов.ASP.NET Core 2.2 uses a new endpoint routing system for improved dispatching of requests. Среди изменений представлены новые члены для создания ссылок API и преобразователи параметров маршрута.The changes include new link generation API members and route parameter transformers.

Дополнительные сведения см. в следующих ресурсах:For more information, see the following resources:

Проверки работоспособностиHealth checks

Новая служба проверки работоспособности упрощает использование ASP.NET Core в средах с обязательной проверкой работоспособности, таких как Kubernetes.A new health checks service makes it easier to use ASP.NET Core in environments that require health checks, such as Kubernetes. Служба проверки работоспособности включает ПО промежуточного слоя и набор библиотек, которые определяют абстракцию IHealthCheck и службу.Health checks includes middleware and a set of libraries that define an IHealthCheck abstraction and service.

Проверки работоспособности используются подсистемой балансировки нагрузки или оркестратором контейнеров для быстрого определения того, насколько эффективно система отвечает на запросы.Health checks are used by a container orchestrator or load balancer to quickly determine if a system is responding to requests normally. Оркестратор контейнеров может реагировать на неуспешную проверку работоспособности, остановив последовательное развертывание или перезапустив контейнер.A container orchestrator might respond to a failing health check by halting a rolling deployment or restarting a container. Подсистема балансировки нагрузки может реагировать на результаты проверки работоспособности путем перенаправления трафика от неисправного экземпляра службы.A load balancer might respond to a health check by routing traffic away from the failing instance of the service.

Проверки работоспособности предоставляются приложением в качестве конечной точки HTTP, используемой системами мониторинга.Health checks are exposed by an application as an HTTP endpoint used by monitoring systems. Проверки работоспособности можно настроить для различных сценариев мониторинга в реальном времени и систем мониторинга.Health checks can be configured for a variety of real-time monitoring scenarios and monitoring systems. Проверки работоспособности интегрируются с проектом BeatPulse.The health checks service integrates with the BeatPulse project. Это значительно упрощает добавление проверок в десятки распространенных систем и зависимых компонентов.which makes it easier to add checks for dozens of popular systems and dependencies.

Дополнительные сведения см. в статье Проверки работоспособности в ASP.NET Core.For more information, see Health checks in ASP.NET Core.

HTTP/2 в KestrelHTTP/2 in Kestrel

В ASP.NET Core 2.2 добавлена поддержка HTTP/2.ASP.NET Core 2.2 adds support for HTTP/2.

HTTP/2 является основной редакцией HTTP-протокола.HTTP/2 is a major revision of the HTTP protocol. В число важных функций HTTP/2 входят следующие:Notable features of HTTP/2 include:

  • Поддержка сжатия заголовка.Support for header compression.
  • Полностью мультиплексные потоки через одно соединение.Fully multiplexed streams over a single connection.

Версия HTTP/2 сохраняет семантику HTTP (например, методы и заголовки HTTP), однако она заметно отличается от HTTP/1.x в отношении механизмов кадрирования и передачи данных между клиентом и сервером.While HTTP/2 preserves HTTP's semantics (for example, HTTP headers and methods), it's a breaking change from HTTP/1.x on how data is framed and sent between the client and server.

В связи с этим изменением механизмов кадрирования серверам и клиентам необходимо согласовывать используемую версию протокола.As a consequence of this change in framing, servers and clients need to negotiate the protocol version used. Согласование протоколов на уровне приложений (Application-Layer Protocol Negotiation, ALPN) — это расширение TLS, с помощью которого сервер и клиент могут согласовать версию протокола в рамках процесса подтверждения TLS.Application-Layer Protocol Negotiation (ALPN) is a TLS extension that allows the server and client to negotiate the protocol version used as part of their TLS handshake. Даже при наличии у сервера и клиента сведений о версии протокола все основные браузеры поддерживают ALPN как единственное средство для установления соединения по протоколу HTTP/2.While it is possible to have prior knowledge between the server and the client on the protocol, all major browsers support ALPN as the only way to establish an HTTP/2 connection.

Дополнительные сведения см. в статье Поддержка HTTP/2.For more information, see HTTP/2 support.

Настройка KestrelKestrel configuration

В предыдущих версиях ASP.NET Core настройка параметров Kestrel осуществлялась путем вызова UseKestrel.In earlier versions of ASP.NET Core, Kestrel options are configured by calling UseKestrel. В версии 2.2 для настройки параметров Kestrel вызывается метод ConfigureKestrel в построителе узла.In 2.2, Kestrel options are configured by calling ConfigureKestrel on the host builder. Это изменение позволяет устранить проблему с порядком регистрации IServer для внутрипроцессного размещения.This change resolves an issue with the order of IServer registrations for in-process hosting. Дополнительные сведения см. в следующих ресурсах:For more information, see the following resources:

Внутрипроцессное размещение в службах IISIIS in-process hosting

В более ранних версиях ASP.NET Core службы IIS выступают в качестве обратного прокси-сервера.In earlier versions of ASP.NET Core, IIS serves as a reverse proxy. В версии 2.2 модуль ASP.NET Core может загружать CoreCLR и размещать приложение в рабочем процессе IIS (w3wp.exe).In 2.2, the ASP.NET Core Module can boot the CoreCLR and host an app inside the IIS worker process (w3wp.exe). Внутрипроцессное размещение позволяет оптимизировать производительность и диагностику при работе со службами IIS.In-process hosting provides performance and diagnostic gains when running with IIS.

Дополнительные сведения см. в статье Внутрипроцессное размещение для служб IIS.For more information, see in-process hosting for IIS.

Клиент Java SignalRSignalR Java client

В ASP.NET Core 2.2 представлен клиент Java для SignalR.ASP.NET Core 2.2 introduces a Java Client for SignalR. Этот клиент поддерживает подключение к серверу SignalR ASP.NET Core из кода Java, в том числе из приложений Android.This client supports connecting to an ASP.NET Core SignalR Server from Java code, including Android apps.

Дополнительные сведения см. в статье о клиенте Java для SignalR ASP.NET Core.For more information, see ASP.NET Core SignalR Java client.

Усовершенствования CORSCORS improvements

В предыдущих версия ASP.NET Core ПО промежуточного слоя CORS обеспечивало отправку заголовков Accept, Accept-Language, Content-Language и Origin независимо от значений, настроенных в CorsPolicy.Headers.In earlier versions of ASP.NET Core, CORS Middleware allows Accept, Accept-Language, Content-Language, and Origin headers to be sent regardless of the values configured in CorsPolicy.Headers. В версии 2.2 соблюдение политики ПО промежуточного слоя CORS возможно только в том случае, если отправляемые в Access-Control-Request-Headers заголовки точно соответствуют заголовкам, указанным в WithHeaders.In 2.2, a CORS Middleware policy match is only possible when the headers sent in Access-Control-Request-Headers exactly match the headers stated in WithHeaders.

Дополнительные сведения см. в статье ПО промежуточного слоя CORS.For more information, see CORS Middleware.

Сжатие ответовResponse compression

ASP.NET Core 2.2 поддерживает сжатие ответов с использованием формата сжатия Brotli.ASP.NET Core 2.2 can compress responses with the Brotli compression format.

Дополнительные сведения см. в статье Поддержка сжатия Brotli для сжатия ответов в ПО промежуточного слоя.For more information, see Response Compression Middleware supports Brotli compression.

Шаблоны проектовProject templates

Шаблоны веб-проектов ASP.NET Core обновлены до Bootstrap 4 и Angular 6.ASP.NET Core web project templates were updated to Bootstrap 4 and Angular 6. Новое оформление выглядит проще и позволяет более эффективно отображать важные структуры приложения.The new look is visually simpler and makes it easier to see the important structures of the app.

Домашняя или индексная страница

Производительность проверокValidation performance

Модель MVC имеет расширяемую гибкую систему проверки, позволяющую на основе запросов определять, какие средства проверки применяются к конкретной модели.MVC’s validation system is designed to be extensible and flexible, allowing you to determine on a per request basis which validators apply to a given model. Эта возможность отлично подходит для разработки сложных поставщиков служб проверки.This is great for authoring complex validation providers. Тем не менее в большинстве распространенных случаев приложение использует только встроенные средства проверки и не нуждается в таких дополнительных возможностях.However, in the most common case an application only uses the built-in validators and don’t require this extra flexibility. К встроенным средствам проверки относятся заметки к данным, такие как [Required] и [StringLength], а также IValidatableObject.Built-in validators include DataAnnotations such as [Required] and [StringLength], and IValidatableObject.

В ASP.NET Core 2.2 модель MVC может обойти проверку в случаях, когда определяется, что для указанного графа модели проверка не требуется.In ASP.NET Core 2.2, MVC can short-circuit validation if it determines that a given model graph doesn't require validation. Пропуск проверки приводит к существенным улучшениям для моделей, в которых отсутствуют или не могут использоваться средства проверки.Skipping validation results in significant improvements when validating models that can't or don't have any validators. К ним относятся такие объекты, как коллекции примитивов (например, byte[], string[], Dictionary<string, string>) или сложные графы объектов с небольшим количеством средств проверки.This includes objects such as collections of primitives (such as byte[], string[], Dictionary<string, string>), or complex object graphs without many validators.

Производительность клиента HTTPHTTP Client performance

В ASP.NET Core 2.2 была повышена производительность SocketsHttpHandler за счет уменьшения числа конфликтов, связанных с блокировкой пула подключений.In ASP.NET Core 2.2, the performance of SocketsHttpHandler was improved by reducing connection pool locking contention. Была увеличена пропускная способность приложений, которые выполняют множество исходящих запросов HTTP, таких как некоторые архитектуры микрослужб.For apps that make many outgoing HTTP requests, such as some microservices architectures, throughput is improved. Под нагрузкой пропускная способность HttpClient может повышаться до 60 % в Linux и до 20 % в Windows.Under load, HttpClient throughput can be improved by up to 60% on Linux and 20% on Windows.

Дополнительные сведения см. в статье, посвященной запросам на вытягивание, благодаря которым удалось добиться этого улучшения.For more information, see the pull request that made this improvement.

Дополнительные сведенияAdditional information

Полный список изменений см. в статье Заметки о выпуске ASP.NET Core 2.2.For the complete list of changes, see the ASP.NET Core 2.2 Release Notes.