Blazor的Auto渲染模式是.NET 8引入的自动选择SSR或CSR的特性,首屏服务端预渲染,交互后可升级为WebAssembly或Interactive Server。需在Program.cs调用AddAutoRenderMode()、注册MapBlazorHub(),并在App.razor使用@rendermode Auto。

Blazor 的自动渲染模式(Auto)是 .NET 8 引入的新特性,它让组件能根据运行环境自动选择服务端渲染(SSR)或客户端渲染(CSR),无需手动切换配置。启用后,首屏走服务端快速呈现,交互后无缝升级为 WebAssembly 或 Interactive Server 模式——关键在于“自动”,但需要正确配置和理解触发条件。
在项目中启用 Auto 模式,核心是修改 Program.cs 中的渲染服务注册方式:
AddServerSideBlazor() 或 AddWebAssemblyRenderMode() 替换为 AddAutoRenderMode()
MapControllers() 和 MapBlazorHub()(服务端通道必需)App.razor 根组件上添加 @rendermode Auto 指令示例代码片段:
// Program.cs
builder.Services.AddAutoRenderMode(); // ← 关键一步
// ...
app.MapBlazorHub();
app.MapControllers();
app.MapFallbackToPage("/_Host");
Auto 不是“随机选”,而是按请求上下文智能决策:
注意:是否启用 WASM 升级,取决于你是否在 _Host.cshtml 中同时引用了 blazor.webassembly.js 和 blazor.server.js,并配置了 autostart="false" 交由框架调度。
不是所有组件都必须用 Auto,你可以混合使用:
@rendermode Auto,子组件可显式指定 @rendermode InteractiveServer 或 @rendermode InteractiveWebAssembly
OnAfterRenderAsync 或 NavigationManager.UriChanged 做懒加载判断@code 块中直接 new 实例(可能跨请求复用),推荐用 [Inject] IStateContainer 或 Scoped 服务打开浏览器开发者工具,观察几个关键信号:
X-Blazor-Render-Mode: Auto
__blazor_start_options 脚本块,且 mode 字段为 "auto"
Blazor started in auto mode. Rendering with InteractiveServer. 的日志基本上就这些。Auto 模式不复杂但容易忽略服务端通道和脚本加载顺序,配对好 MapBlazorHub() 和双 JS 引用,就能稳稳跑起来。