.NET 11 来了:Kestrel 提速 40%,还有这些你可能不知道的变化

发布日期:2026-05-14 | 来源:Microsoft Learn

.NET 11 的 ASP.NET Core 更新没有那种"推倒重来"式的大 feature,但有一批实打实的改进:Blazor 的虚拟化重写了、Kestrel 吞吐量提了 20-40%、OpenAPI 升到 3.2、还顺带把 MCP 服务器模板直接塞进了 SDK。下面按模块梳理。

一、Blazor

DisplayName 组件

以前要在表格里显示"生产日期"而不是 ProductionDate,得手动处理。现在直接声明式绑定:

ini 复制代码
 <DisplayName For="@(() => Model!.ProductionDate)" />

[Display]​ 属性的优先级高于 [DisplayName],而且支持本地化。

Blazor.start() 统一格式

脚本启动的选项格式现在统一了,Blazor Server 和 WebAssembly 都用同一套嵌套结构:

css 复制代码
 Blazor.start({
   webAssembly: {
     loadBootResource: function (...) { ... }
   }
 });

BasePath 组件

自动生成 <base href>​ 标签,不用再手写到 _Host.cshtml 里了。

NavMenu 不再内嵌 JS

内联 JavaScript 被移除,改用并置 JS 模块------这对 Content Security Policy(CSP)友好很多。

相对导航

NavigateTo​ 和 NavLink​ 现在可以传 RelativeToCurrentUri = true,不用每次都拼完整路径:

ini 复制代码
 Navigation.NavigateTo("/configuration", new NavigationOptions { RelativeToCurrentUri = true });
ini 复制代码
 <NavLink href="configuration" RelativeToCurrentUri="true">Configuration</NavLink>

TempData 支持静态 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现在显示为二进制字符串架构

示例------描述文件下载响应:

less 复制代码
 app.MapPost("/file", () => TypedResults.File(content))
    .Produces<FileContentResult>(contentType: MediaTypeNames.Application.Octet);

四、身份验证和授权

Identity 支持 TimeProvider

所有跟时间相关的操作改用 TimeProvider,测试时注入 fake provider 即可:

ini 复制代码
 services.AddSingleton<TimeProvider>(fakeTimeProvider);
 services.AddIdentity<IdentityUser, IdentityRole>();

验证器名称自动推断

根据 AAGUID 自动识别常见的 WebAuthn 验证器并填充友好名称(Google、iCloud、Windows Hello 等),不用手动配了。

五、性能

Kestrel HTTP/1.1 提速

解析器改用非抛异常路径,吞吐量提升 20-40% 。这是本次版本中最直接的性能收益。

HTTP 日志中间件池化

ResponseBufferingStream 改用对象池,减少 GC 分配。

运行时异步优化

共享框架内部启用了 runtime-async 优化,减少 async/await 的内存分配。公共 API 没有任何变化,但建议在预览阶段做好回归测试------异常堆栈和 AsyncLocal 行为可能有微小变化。

六、基础设施

Zstandard 压缩

支持 zstd 响应压缩和请求解压缩,默认启用:

scss 复制代码
 builder.Services.AddResponseCompression();
 builder.Services.AddRequestDecompression();
 builder.Services.Configure<ZstandardCompressionProviderOptions>(...)

注意已经有 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 里,不用额外安装包。MCP(Model 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------都在填补之前版本留下的空白。

相关推荐
用户2279584482875 小时前
医生问“现在还在吃吗”:EHR 用药 RAG 先看 effectivePeriod,别先信 note
后端
geovindu5 小时前
go: Read-Write Lock Pattern
开发语言·后端·设计模式·golang·读写锁模式
百珏5 小时前
AI 应用技术演进串讲大纲
人工智能·后端·架构
Bacon5 小时前
装上就回不去了:CodeGraph 让 AI 编程效率飙升 92%,它到底做了什么?
前端·人工智能·后端
Xiacqi16 小时前
Spring全局异常处理
java·后端
狗头大军之江苏分军6 小时前
Python 协程进化史:从 yield 到 async/await 的底层实现
前端·后端
浩风祭月6 小时前
把慢查询日志扔给 AI,从分析到修复只用了半小时:一份完整的实操手册
后端·ai编程
大熊程序猿7 小时前
ASP.NET Core 认证授权:JWT与OAuth2实战
后端·asp.net
zhangxingchao8 小时前
AI应用开发五:RAG高级技术与调优
前端·人工智能·后端