Blazor SSR在.NET 8中默认启用自动混合渲染,通过@rendermode指令(如InteractiveAuto)控制组件渲染模式,并需注意预渲染阶段限制及服务端配置。

Blazor SSR(Server-Side Rendering)在 .NET 8 中已正式成为默认的 Blazor 渲染模式之一,它结合了服务端快速首屏渲染与客户端交互能力,无需手动配置 SignalR 连接即可开箱即用。核心要点是:项目模板默认启用 SSR,但需明确理解其运行机制和关键配置项。
创建支持 SSR 的 Blazor 项目
使用 .NET 8 SDK 创建新项目时,选择 Blazor Web App 模板(不是旧的 “Blazor Server” 或 “Blazor WebAssembly”):
- 命令行执行:
dotnet new blazor --framework net8.0 - 该模板默认启用“自动混合渲染”(Auto render mode),即服务端首屏 + 客户端水合(Hydration)+ 可选的 WebAssembly 回退
- 项目结构中会包含
App.razor、Routes.razor和Pages/目录,且Program.cs中已注入AddInteractiveServerComponents()或AddInteractiveWebAssemblyComponents()
理解并设置组件渲染模式
每个 Razor 组件可独立指定渲染方式,通过 @rendermode 指令控制:
-
@rendermode InteractiveServer:服务端托管交互,DOM 更新通过 SignalR 实时同步(传统 Blazor Server) -
@rendermode InteractiveWebAssembly:组件下载到浏览器后本地执行(需引用 WebAssembly 运行时) -
@rendermode InteractiveAuto:默认推荐 —— 首屏服务端渲染,加载完成后自动切换为 WebAssembly(若可用)或回退到 Server -
@rendermode Static:纯静态 HTML,无交互能力,适合 SEO 敏感页面(如首页介绍)
例如,在 Pages/Index.razor 顶部添加:@rendermode InteractiveAuto 即启用混合渲染。
启用服务端预渲染(Prerendering)
SSR 默认开启预渲染,但需确保服务端能同步生成初始 HTML:
- 检查
Program.cs中是否调用builder.Services.AddRazorComponents().AddInteractiveServerComponents(); - 确认
app.MapRazorComponents已注册().AddInteractiveServerRenderMode(); - 预渲染期间无法访问
NavigationManager、JSRuntime等客户端专属服务,需用@if (isPrerendering == false)条件包裹相关逻辑 - 如需在预渲染阶段获取数据,应使用服务端可执行的逻辑(如 HttpClient 调用 API),避免依赖浏览器环境
部署与注意事项
Blazor SSR 应用本质是服务器托管的 Web 应用,部署方式与普通 ASP.NET Core 一致:
- 发布命令:
dotnet publish -c Release -o ./publish - 可部署到 IIS、Linux+Nginx、Azure App Service、Docker 容器等支持 .NET 8 运行时的环境
- 无需单独部署前端资源 —— 所有组件、静态文件、服务端逻辑打包在单一应用中
- 注意:若使用
InteractiveAuto,需确保客户端能访问_framework/blazor.webassembly.js(WebAssembly 模式所需),否则自动降级为 Server 模式
基本上就这些。不复杂但容易忽略的是渲染模式的显式声明和预渲染边界处理 —— 控制好这两点,SSR 就能既快又稳。










