当前位置: 首页 > news >正文

.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,得手动处理。现在直接声明式绑定:

<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 Policy(CSP)友好很多。

相对导航

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

Navigation.NavigateTo("/configuration", new NavigationOptions { RelativeToCurrentUri = true });
<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现在显示为二进制字符串架构

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

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

四、身份验证和授权

Identity 支持 TimeProvider

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

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 响应压缩和请求解压缩,默认启用:

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——都在填补之前版本留下的空白。

http://www.jsqmd.com/news/845529/

相关文章:

  • Bifrost三星固件下载器:免费跨平台获取官方固件的终极指南
  • Proteus 8 搭建8086最小系统,卡在MASM32配置?手把手教你搞定(附文件)
  • ARM+Linux嵌入式技术新趋势:从AI边缘部署到工业物联网的深度演进
  • 智能快递柜嵌入式方案全解析:从i.MX6Q核心板到云管端架构实战
  • taotoken的稳定直连与容灾路由如何保障企业级应用的sla
  • 从DHT11到SHT30:手把手教你升级STM32的温湿度传感器(附代码对比)
  • ESD防护实战:从原理到设计,全面解析静电防护的五大隐患与解决方案
  • 如何快速掌握Ultimate ASI Loader:5个简单步骤安装游戏MOD加载器
  • 2026 北京名包回收避坑:拒绝压价套路,只看成色 + 配件 + 行情 - 奢侈品回收测评
  • 为什么92.4%的住院医师仍在用Google查文献?Perplexity医疗垂直搜索的5个不可替代性证据
  • Perplexity留学数据获取实战手册(2024QS/THE/USNews三库联动秘技)
  • C语言学习笔记 - 39.数据类型 - scanf函数多变量输入用法
  • CircuitPython串口控制台与REPL实战指南:从环境配置到高效调试
  • JetBrains IDE试用期重置终极指南:ide-eval-resetter完全解析
  • PlotSquared终极指南:5分钟快速搭建Minecraft领地系统
  • openmv的目录
  • ESP8266刷写CircuitPython固件与Ampy文件传输实战指南
  • Windows 10系统OneDrive深度卸载技术方案解析与实施指南
  • 昆山2026年整形机构选择指南与合规避坑建议 - 资讯焦点
  • 12306智能抢票助手终极使用指南:快速抢到火车票的完整教程
  • MPC-BE:为什么这款开源播放器能成为Windows多媒体播放的终极解决方案?
  • 基于树莓派A+与RetroPie的DIY复古游戏掌机全流程实战
  • 免费开源m4s转MP4工具:轻松解决B站缓存视频格式限制问题
  • 【Perplexity搜索生产力白皮书】:从学术研究到代码调试,6类高频场景落地指南
  • 告别CPU轮询!深入对比HC32F4A0与STM32的ADC+DMA设计差异(以AOS外设为例)
  • 2026年国内新能源汽车充电桩品牌综合实力排行 - 真知灼见33
  • 三星固件下载终极指南:3分钟掌握Bifrost跨平台工具
  • 如何快速安装Koikatu HF Patch:新手5分钟完整指南
  • BiliDownloader深度解析:从架构设计到高效下载的技术实现
  • 基于Adafruit CRICKIT与3D打印的水面机器人DIY全攻略