From 208dd94526d364d8bc4cf1b6d69a3184cd56e4b9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Jun 2026 20:26:08 +0000 Subject: [PATCH 1/7] Initial plan From f21684b20a9d4a21813483a25daba6bd52fe8b62 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Jun 2026 20:28:53 +0000 Subject: [PATCH 2/7] Add Preview 5 What's New include files for Kestrel and OpenAPI --- aspnetcore/release-notes/aspnetcore-11.md | 6 +++++- ...strel-trailer-header-timeouts-preview-5.md | 10 ++++++++++ .../openapi-schema-improvements-preview-5.md | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 aspnetcore/release-notes/aspnetcore-11/includes/kestrel-trailer-header-timeouts-preview-5.md create mode 100644 aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md diff --git a/aspnetcore/release-notes/aspnetcore-11.md b/aspnetcore/release-notes/aspnetcore-11.md index 4800a84d2575..767c717ed4fb 100644 --- a/aspnetcore/release-notes/aspnetcore-11.md +++ b/aspnetcore/release-notes/aspnetcore-11.md @@ -5,7 +5,7 @@ author: wadepickett description: Learn about the new features in ASP.NET Core in .NET 11. ms.author: wpickett ms.custom: mvc -ms.date: 05/19/2026 +ms.date: 06/08/2026 uid: aspnetcore-11 --- # What's new in ASP.NET Core in .NET 11 @@ -48,6 +48,8 @@ This section describes new features for OpenAPI. [!INCLUDE[](~/release-notes/aspnetcore-11/includes/file-result-openapi-preview4.md)] +[!INCLUDE[](~/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md)] + ## Authentication and authorization This section describes new features for authentication and authorization. @@ -82,6 +84,8 @@ This section describes miscellaneous new features in .NET 11. [!INCLUDE[](~/release-notes/aspnetcore-11/includes/rate-limiting-retry-after-preview-4.md)] +[!INCLUDE[](~/release-notes/aspnetcore-11/includes/kestrel-trailer-header-timeouts-preview-5.md)] + ## Breaking changes Use the articles in [Breaking changes in .NET](/dotnet/core/compatibility/breaking-changes) to find breaking changes that might apply when upgrading an app to a newer version of .NET. diff --git a/aspnetcore/release-notes/aspnetcore-11/includes/kestrel-trailer-header-timeouts-preview-5.md b/aspnetcore/release-notes/aspnetcore-11/includes/kestrel-trailer-header-timeouts-preview-5.md new file mode 100644 index 000000000000..907bdbaeb3b5 --- /dev/null +++ b/aspnetcore/release-notes/aspnetcore-11/includes/kestrel-trailer-header-timeouts-preview-5.md @@ -0,0 +1,10 @@ +### Kestrel applies trailer header timeouts + +Kestrel now applies `RequestHeadersTimeout` to fragmented HTTP/2 and HTTP/3 trailer headers that don't finish sending the header block. The same timeout that protects initial request headers now also prevents connections from staying open indefinitely while Kestrel waits for trailer `HEADERS` frames to complete. + +```csharp +builder.WebHost.ConfigureKestrel(options => +{ + options.Limits.RequestHeadersTimeout = TimeSpan.FromSeconds(10); +}); +``` diff --git a/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md b/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md new file mode 100644 index 000000000000..0abef27e38b8 --- /dev/null +++ b/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md @@ -0,0 +1,19 @@ +### OpenAPI schemas better match ASP.NET Core behavior + +OpenAPI generation now handles two schema cases more accurately. Non-body enum parameters keep the original C# enum member names even when HTTP JSON options configure a `JsonStringEnumConverter` naming policy, because query, route, header, and form binding use `Enum.TryParse` rather than JSON serialization. Array schema reference IDs now use valid component names such as `stringArray` and `TodoArray` instead of names with array syntax. + +```csharp +builder.Services.ConfigureHttpJsonOptions(options => +{ + options.SerializerOptions.Converters.Add( + new JsonStringEnumConverter(JsonNamingPolicy.KebabCaseLower)); +}); + +app.MapGet("/orders", (OrderStatus status) => Results.Ok(status)); +``` + +With this configuration, a body schema can still describe `OrderStatus.PendingReview` as `pending-review`, while the query parameter schema describes the accepted value as `PendingReview`. + +Minimal API endpoints can support multiple `Produces()` extension methods for the same status code—for example, to specify that a 200 response may arrive as `application/json` or `text/plain` with different schemas. The same support applies to MVC controllers via multiple `[ProducesResponseType]` attributes. In prior releases the framework collapsed each status code to a single response type and silently dropped the rest, making it impossible to describe endpoints that serve multiple content types. `ApiExplorer` now preserves every declared response type with deterministic ordering, and the generated OpenAPI document emits separate content entries per media type—or an `anyOf` schema when multiple types share the same content type—so generated clients can accurately model every shape an endpoint returns. + +Thank you [@marcominerva](https://github.com/marcominerva) for the array schema reference contribution! From dc9f8f9bc706bfece3832ef70959c99604aaffe2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 8 Jun 2026 20:29:39 +0000 Subject: [PATCH 3/7] Improve readability of OpenAPI schema improvements include file --- .../includes/openapi-schema-improvements-preview-5.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md b/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md index 0abef27e38b8..a2541d4d93d6 100644 --- a/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md +++ b/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md @@ -14,6 +14,8 @@ app.MapGet("/orders", (OrderStatus status) => Results.Ok(status)); With this configuration, a body schema can still describe `OrderStatus.PendingReview` as `pending-review`, while the query parameter schema describes the accepted value as `PendingReview`. -Minimal API endpoints can support multiple `Produces()` extension methods for the same status code—for example, to specify that a 200 response may arrive as `application/json` or `text/plain` with different schemas. The same support applies to MVC controllers via multiple `[ProducesResponseType]` attributes. In prior releases the framework collapsed each status code to a single response type and silently dropped the rest, making it impossible to describe endpoints that serve multiple content types. `ApiExplorer` now preserves every declared response type with deterministic ordering, and the generated OpenAPI document emits separate content entries per media type—or an `anyOf` schema when multiple types share the same content type—so generated clients can accurately model every shape an endpoint returns. +Minimal API endpoints can support multiple `Produces()` extension methods for the same status code—for example, to specify that a 200 response may arrive as `application/json` or `text/plain` with different schemas. The same support applies to MVC controllers via multiple `[ProducesResponseType]` attributes. + +In prior releases, the framework collapsed each status code to a single response type and silently dropped the rest, making it impossible to describe endpoints that serve multiple content types. `ApiExplorer` now preserves every declared response type with deterministic ordering, and the generated OpenAPI document emits separate content entries per media type—or an `anyOf` schema when multiple types share the same content type. Thank you [@marcominerva](https://github.com/marcominerva) for the array schema reference contribution! From 00cef02738f11b93819cf5762d14c7c1da9081cc Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Mon, 8 Jun 2026 14:18:50 -0700 Subject: [PATCH 4/7] Potential fix for pull request finding Add API xref links. Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../includes/openapi-schema-improvements-preview-5.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md b/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md index a2541d4d93d6..65fe0684780b 100644 --- a/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md +++ b/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md @@ -14,7 +14,7 @@ app.MapGet("/orders", (OrderStatus status) => Results.Ok(status)); With this configuration, a body schema can still describe `OrderStatus.PendingReview` as `pending-review`, while the query parameter schema describes the accepted value as `PendingReview`. -Minimal API endpoints can support multiple `Produces()` extension methods for the same status code—for example, to specify that a 200 response may arrive as `application/json` or `text/plain` with different schemas. The same support applies to MVC controllers via multiple `[ProducesResponseType]` attributes. +Minimal API endpoints can support multiple extension method calls for the same status code—for example, to specify that a 200 response may arrive as `application/json` or `text/plain` with different schemas. The same support applies to MVC controllers via multiple [`[ProducesResponseType]`](xref:Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute) attributes. In prior releases, the framework collapsed each status code to a single response type and silently dropped the rest, making it impossible to describe endpoints that serve multiple content types. `ApiExplorer` now preserves every declared response type with deterministic ordering, and the generated OpenAPI document emits separate content entries per media type—or an `anyOf` schema when multiple types share the same content type. From b0b6923c1b9ad82b2a9a8200f7b72bd2d722d831 Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Mon, 8 Jun 2026 15:04:34 -0700 Subject: [PATCH 5/7] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../includes/openapi-schema-improvements-preview-5.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md b/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md index 65fe0684780b..c89ded4e3c2d 100644 --- a/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md +++ b/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md @@ -16,6 +16,6 @@ With this configuration, a body schema can still describe `OrderStatus.PendingRe Minimal API endpoints can support multiple extension method calls for the same status code—for example, to specify that a 200 response may arrive as `application/json` or `text/plain` with different schemas. The same support applies to MVC controllers via multiple [`[ProducesResponseType]`](xref:Microsoft.AspNetCore.Mvc.ProducesResponseTypeAttribute) attributes. -In prior releases, the framework collapsed each status code to a single response type and silently dropped the rest, making it impossible to describe endpoints that serve multiple content types. `ApiExplorer` now preserves every declared response type with deterministic ordering, and the generated OpenAPI document emits separate content entries per media type—or an `anyOf` schema when multiple types share the same content type. +In prior releases, the framework collapsed each status code to a single response type and silently dropped the rest, making it impossible to describe endpoints that serve multiple content types. now preserves every declared response type with deterministic ordering, and the generated OpenAPI document emits separate content entries per media type—or an `anyOf` schema when multiple types share the same content type. Thank you [@marcominerva](https://github.com/marcominerva) for the array schema reference contribution! From 0b0e97c0b38f1a0d26b8feb87d31df07cdca579b Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Mon, 8 Jun 2026 15:07:16 -0700 Subject: [PATCH 6/7] Apply suggestions from code review Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../includes/kestrel-trailer-header-timeouts-preview-5.md | 2 +- .../includes/openapi-schema-improvements-preview-5.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aspnetcore/release-notes/aspnetcore-11/includes/kestrel-trailer-header-timeouts-preview-5.md b/aspnetcore/release-notes/aspnetcore-11/includes/kestrel-trailer-header-timeouts-preview-5.md index 907bdbaeb3b5..4c97d354d06f 100644 --- a/aspnetcore/release-notes/aspnetcore-11/includes/kestrel-trailer-header-timeouts-preview-5.md +++ b/aspnetcore/release-notes/aspnetcore-11/includes/kestrel-trailer-header-timeouts-preview-5.md @@ -1,6 +1,6 @@ ### Kestrel applies trailer header timeouts -Kestrel now applies `RequestHeadersTimeout` to fragmented HTTP/2 and HTTP/3 trailer headers that don't finish sending the header block. The same timeout that protects initial request headers now also prevents connections from staying open indefinitely while Kestrel waits for trailer `HEADERS` frames to complete. +Kestrel now applies to fragmented HTTP/2 and HTTP/3 trailer headers that don't finish sending the header block. The same timeout that protects initial request headers now also prevents connections from staying open indefinitely while Kestrel waits for trailer `HEADERS` frames to complete. ```csharp builder.WebHost.ConfigureKestrel(options => diff --git a/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md b/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md index c89ded4e3c2d..551612d8c7a6 100644 --- a/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md +++ b/aspnetcore/release-notes/aspnetcore-11/includes/openapi-schema-improvements-preview-5.md @@ -1,6 +1,6 @@ ### OpenAPI schemas better match ASP.NET Core behavior -OpenAPI generation now handles two schema cases more accurately. Non-body enum parameters keep the original C# enum member names even when HTTP JSON options configure a `JsonStringEnumConverter` naming policy, because query, route, header, and form binding use `Enum.TryParse` rather than JSON serialization. Array schema reference IDs now use valid component names such as `stringArray` and `TodoArray` instead of names with array syntax. +OpenAPI generation now handles several schema cases more accurately. Non-body enum parameters keep the original C# enum member names even when HTTP JSON options configure a naming policy, because query, route, header, and form binding use `Enum.TryParse` rather than JSON serialization. Array schema reference IDs now use valid component names such as `stringArray` and `TodoArray` instead of names with array syntax. ```csharp builder.Services.ConfigureHttpJsonOptions(options => From e27e0504deb407810727a4cd9f39d60e8b76cbdf Mon Sep 17 00:00:00 2001 From: Wade Pickett Date: Mon, 8 Jun 2026 15:07:57 -0700 Subject: [PATCH 7/7] Apply suggestion from @wadepickett --- aspnetcore/release-notes/aspnetcore-11.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aspnetcore/release-notes/aspnetcore-11.md b/aspnetcore/release-notes/aspnetcore-11.md index 767c717ed4fb..15fcea34c09a 100644 --- a/aspnetcore/release-notes/aspnetcore-11.md +++ b/aspnetcore/release-notes/aspnetcore-11.md @@ -5,7 +5,7 @@ author: wadepickett description: Learn about the new features in ASP.NET Core in .NET 11. ms.author: wpickett ms.custom: mvc -ms.date: 06/08/2026 +ms.date: 06/09/2026 uid: aspnetcore-11 --- # What's new in ASP.NET Core in .NET 11