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<app>().AddInteractiveServerRenderMode();</app>已注册 预渲染期间无法访问
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 就能既快又稳。
