Blazor WebAssembly 本身不支持服务端预渲染,因其运行依赖客户端下载并初始化 dotnet.wasm 和程序集;官方推荐方案是采用 ASP.NET Core Hosted 模式,通过 WebAssemblyPrerendered 渲染模式在服务端用 Blazor Server 首次渲染 HTML,再由客户端 WASM 接管(hydrate),需避免在预渲染阶段调用 JSRuntime 等客户端专属 API。
Blazor WebAssembly 本身不支持服务端预渲染(Prerendering),因为它的核心逻辑完全在浏览器中运行,.NET 运行时和应用代码都下载到客户端后才启动。但你可以通过 Blazor Hybrid 方式 + ASP.NET Core Hosted 模式 实现“类预渲染”效果——即先用服务端 Blazor Server 渲染首屏 HTML,再无缝切换(hydrate)为 WebAssembly 客户端运行。
WebAssembly 应用启动依赖下载以下资源:
这些必须在浏览器中加载并初始化后,UI 才能渲染。服务端无法执行 WASM 字节码,所以无法提前生成 HTML。
这是官方推荐的折中方案,适用于 blazorwasm 项目托管在 ASP.NET Core 后端(即 Client/Server/Shared 三层结构):
Server 项目中配置 Blazor Server 渲染入口(如 _Host.cshtml)
__blazor_start_options 脚本⚠️ 注意:预渲染期间不能调用 WASM 专属 API(如 JSRuntime.InvokeAsync),否则服务端会报错。需用 NavigationManager 或条件判断规避。
确保 Server 项目的 Program.cs 中已注册服务:
builder.Services.AddRazorComponents()
.AddInteractiveWebAssemblyComponents(); // 关键:启用 W
ebAssembly 预渲染支持
在 Pages/_Host.cshtml 中使用正确 render-mode:
同时确认 wwwroot/index.html 的 存在,且脚本引用顺序正确(blazor.webassembly.js 必须在组件之后)。
如果不想引入 Server 端渲染,也可手动实现轻量级首屏:
index.html 中写一个简单的 loading 页面或骨架屏(HTML/CSS)Loading...
WebAssemblyHostBuilder 的 OnInitializedAsync 或自定义加载状态管理真实 UI 显示时机这种方式不是真正预渲染,但能显著改善首屏感知性能,适合内容静态、SEO 要求不高的场景。
基本上就这些。Blazor WebAssembly 的预渲染本质是借力服务端 Blazor Server 的能力,不是纯客户端能做到的事。选对模式、避开服务端不支持的 API,就能兼顾 SEO 和交互体验。