.NET 11 来了:Kestrel 提速 40%,还有这些你可能不知道的变化
发布日期2026-05-14 | 来源Microsoft Learn.NET 11 的 ASP.NET Core 更新没有那种推倒重来式的大 feature但有一批实打实的改进Blazor 的虚拟化重写了、Kestrel 吞吐量提了 20-40%、OpenAPI 升到 3.2、还顺带把 MCP 服务器模板直接塞进了 SDK。下面按模块梳理。一、BlazorDisplayName 组件以前要在表格里显示生产日期而不是ProductionDate得手动处理。现在直接声明式绑定DisplayName For(() Model!.ProductionDate) /[Display] 属性的优先级高于[DisplayName]而且支持本地化。Blazor.start() 统一格式脚本启动的选项格式现在统一了Blazor Server 和 WebAssembly 都用同一套嵌套结构Blazor.start({ webAssembly: { loadBootResource: function (...) { ... } } });BasePath 组件自动生成base href 标签不用再手写到_Host.cshtml里了。NavMenu 不再内嵌 JS内联 JavaScript 被移除改用并置 JS 模块——这对 Content Security PolicyCSP友好很多。相对导航NavigateTo 和NavLink 现在可以传RelativeToCurrentUri true不用每次都拼完整路径Navigation.NavigateTo(/configuration, new NavigationOptions { RelativeToCurrentUri true });NavLink hrefconfiguration RelativeToCurrentUritrueConfiguration/NavLinkTempData 支持静态 SSR静态服务端渲染下也能跨请求传递临时数据了用[SupplyParameterFromTempData] 属性或级联的ITempData。Blazor Web Worker 模板dotnet new blazorwebworker创建一个新项目模板把计算密集任务丢到 Web Worker 里跑避免阻塞 UI 线程。虚拟化重写Virtualize 组件不再假设所有项等高会自动适应不同高度。OverscanCount 默认值从 3 改成了 15减少空白闪烁。新增AnchorMode 参数None、Beginning、End。新开发服务器独立的 Blazor WebAssembly 应用现在用Microsoft.AspNetCore.Components.Gateway替代旧 DevServer。服务器触发的电路暂停服务器可以主动让客户端暂停 Blazor Server 电路——用于计划内维护避免粗暴断连。二、最小 API终结点筛选器可观察参数绑定失败以前参数绑定失败就直接抛异常现在筛选器管道仍然会走。筛选器里检查HttpContext.Response.StatusCode 400可以接管响应、给用户更友好的提示。开发环境可以设RouteHandlerOptions.ThrowOnBadRequest false让框架返回 400 而不是抛异常。三、OpenAPI改进说明OpenAPI 3.2.0通过options.OpenApiVersion OpenApiSpecVersion.OpenApi3_2启用HTTP QUERY 方法MapMethods支持 QUERY 谓词3.2 原生描述旧版用x-oai-additionalOperations扩展二进制文件响应FileContentResult自动生成type: string, format: binary架构文件流结果类型FileStreamResult、FileContentHttpResult、FileStreamHttpResult现在显示为二进制字符串架构示例——描述文件下载响应app.MapPost(/file, () TypedResults.File(content)) .ProducesFileContentResult(contentType: MediaTypeNames.Application.Octet);四、身份验证和授权Identity 支持 TimeProvider所有跟时间相关的操作改用TimeProvider测试时注入 fake provider 即可services.AddSingletonTimeProvider(fakeTimeProvider); services.AddIdentityIdentityUser, IdentityRole();验证器名称自动推断根据 AAGUID 自动识别常见的 WebAuthn 验证器并填充友好名称Google、iCloud、Windows Hello 等不用手动配了。五、性能Kestrel HTTP/1.1 提速解析器改用非抛异常路径吞吐量提升20-40%。这是本次版本中最直接的性能收益。HTTP 日志中间件池化ResponseBufferingStream改用对象池减少 GC 分配。运行时异步优化共享框架内部启用了 runtime-async 优化减少 async/await 的内存分配。公共 API 没有任何变化但建议在预览阶段做好回归测试——异常堆栈和 AsyncLocal 行为可能有微小变化。六、基础设施Zstandard 压缩支持 zstd 响应压缩和请求解压缩默认启用builder.Services.AddResponseCompression(); builder.Services.AddRequestDecompression(); builder.Services.ConfigureZstandardCompressionProviderOptions(...)注意已经有 Brotli 和 Gzip 的情况下是否需要再加一层 zstd。HTTP/3 提前处理请求不必等控制流和 SETTINGS 帧到位就能开始处理请求减少首次请求延迟。WSL 证书信任dotnet dev-certs https --trust在 WSL 下会同时在 Windows 和 WSL 两侧信任开发证书。原生 OpenTelemetry 追踪ASP.NET Core 原生添加 OpenTelemetry 语义约定属性不再需要额外安装OpenTelemetry.Instrumentation.AspNetCore。如果想关掉设Microsoft.AspNetCore.Hosting.SuppressActivityOpenTelemetryData开关。响应压缩始终输出 Vary: Accept-Encoding修复了缓存代理可能把压缩内容提供给不支持压缩的客户端的 bug。Kestrel TLS 握手可观测性ITlsHandshakeFeature 新增Exception 属性可捕获握手失败详情。ListenOptions.UseTlsClientHelloListener替代旧回调 API。MCP 服务器模板dotnet new mcpserver现在直接内置在 SDK 里不用额外安装包。MCPModel Context Protocol是 AI 工具和代码服务之间的标准通信协议。七、重大变更Microsoft.OpenAPI 库更新至 3.3.1包含基础库的 breaking changes参考升级指南runtime-async 优化可能导致堆栈和 AsyncLocal 行为变化一点看法这次更新最值得关注的是两件事——Kestrel 的 20-40% 吞吐量提升对生产环境是立竿见影的收益MCP 服务器模板进 SDK则预示了 .NET 生态在 AI 集成方向的布局。其他改进更像是把欠的债还上虚拟化重写、OpenAPI 3.2、TimeProvider 支持 Identity——都在填补之前版本留下的空白。