Blazor 交互模式 (Server/WASM) 设置方法

发布时间 - 2025-12-29 00:00:00    点击率:
Blazor提供Server和WebAssembly两种交互模式,创建项目时需通过模板选定;Server依赖SignalR服务端执行,WASM在浏览器中运行.NET运行时;迁移需手动重构项目结构与配置,.NET 8+支持混合渲染模式按组件指定交互方式。

Blazor 提供两种主流交互模式:Server(服务端渲染)和 WebAssembly(客户端运行),选择和配置方式取决于部署环境与应用需求。关键不是“切换模式”,而是创建项目时选定模板,后续可通过修改配置迁移,但需注意运行机制差异带来的限制。

创建新项目时直接选择模式

使用 .NET CLI 或 Visual Studio 创建 Blazor 项目时,模板决定了初始模式:

  • Blazor Server:执行 dotnet new blazorserver -n MyApp,默认启用 SignalR 实时连接,页面逻辑在服务器执行,浏览器只负责 UI 渲染和事件转发
  • Blazor WebAssembly:执行 dotnet new blazorwasm -n MyApp,生成独立的前端应用,.NET 运行时通过 WebAssembly 在浏览器中运行,可托管在任意静态文件服务器上
  • 带 ASP.NET Core Hosted 的 WASM(即“托管式 WASM”):加 --hosted 参数,如 dotnet new blazorwasm --hosted -n MySolution,会生成包含 API 后端的完整解决方案,适合需要后端 API 支持的离线优先场景

现有项目切换模式需重配,非简单开关

Blazor Server 和 WASM 项目结构、依赖项、启动逻辑不同,无法通过改一个配置项切换。迁移需手动操作:

  • 将 Server 项目改为 WASM:需新建 WASM 项目,把 Shared/Pages/ 等业务代码迁移过去;替换 Program.cs 中的 AddServerSideBlazor()AddWasmRenderMode()(.NET 8+)或 AddBlazorWebAssemblyHostedService();移除 SignalR 相关引用和 _Host.cshtml
  • 将 WASM 改为 Server:需新建 Server 项目,迁移组件;修改 Program.cs 使用 AddServerSideBlazor();将 index.html 替换为 _Host.cshtml;删除 wwwroot/_framework/ 相关发布逻辑
  • 注意:HTTP 客户端调用(如 HttpClient)、状态管理、认证方式(如 JWT vs Cookie)、静态资源路径等均需同步调整

.NET 8+ 中统一渲染模式(Auto/Interactive)的配置

.NET 8 引入了“混合渲染”能力,允许同一应用中按需指定组件渲染方式(Server、WASM 或 Auto)。关键在 _Imports.razor 和组件标记中设置:

  • Program.cs 中注册交互式渲染器:
    builder.Services.AddRendering();
    并为不同模式添加服务(如 AddInteractiveServerComponents()AddInteractiveWebAssemblyComponents()
  • 在组件顶部添加渲染指令:
    @rendermode InteractiveServer@rendermode InteractiveWebAssembly
    或使用自动降级:@rendermode InteractiveAuto(先尝试 WASM,失败则回退 Server)
  • 确保 _Host.cshtml(Server)或 index.html(WASM)正确加载对应 JS 初始化脚本(如 blazor.server.jsblazor.webassembly.js

部署与运行时注意事项

模式决定部署方式和运行约束:

  • Server 模式:必须部署在支持 WebSocket/Long Polling 的服务器(如 IIS、Kestrel、Nginx 配合 proxy_pass),需维持用户会话连接,不适用于高延迟或弱网环境
  • WASM 模式:部署为纯静态文件(HTML/JS/WASM),但首次加载体积较大(约 2–5 MB),建议启用 Brotli 压缩、懒加载程序集(true)、预加载关键资源
  • 认证与状态:Server 可直接使用 Cookie 认证;WASM 需通过 API Token(如 JWT)并自行管理本地 token 存储与刷新逻辑

基本上就这些。选对初始模板最省事,混合渲染是渐进升级的好工具,但别指望一键切换底层模型——Server 和 WASM 是两套不同的执行契约。


# html  # js  # 前端  # nginx  # cookie  # 浏览器  # app  # websocket  # 工具  # 懒加载  # iis  # 后端 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Laravel观察者模式如何使用_Laravel Model Observer配置  EditPlus中的正则表达式 实战(2)  如何登录建站主机?访问步骤全解析  详解MySQL数据库的安装与密码配置  Laravel如何创建自定义Facades?(详细步骤)  javascript读取文本节点方法小结  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  jQuery validate插件功能与用法详解  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Python并发异常传播_错误处理解析【教程】  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel如何配置Horizon来管理队列?(安装和使用)  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  JavaScript如何实现继承_有哪些常用方法  高端企业智能建站程序:SEO优化与响应式模板定制开发  深圳网站制作的公司有哪些,dido官方网站?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  详解Android——蓝牙技术 带你实现终端间数据传输  如何在新浪SAE免费搭建个人博客?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  jQuery 常见小例汇总  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  ,南京靠谱的征婚网站?  EditPlus中的正则表达式实战(5)  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  JavaScript如何实现倒计时_时间函数如何精确控制  网易LOFTER官网链接 老福特网页版登录地址  在线制作视频网站免费,都有哪些好的动漫网站?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  Laravel如何实现事件和监听器?(Event & Listener实战)  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  js代码实现下拉菜单【推荐】  香港服务器WordPress建站指南:SEO优化与高效部署策略  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何快速生成高效建站系统源代码?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  如何快速上传自定义模板至建站之星?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  高端云建站费用究竟需要多少预算?  大型企业网站制作流程,做网站需要注册公司吗?  黑客如何通过漏洞一步步攻陷网站服务器?