新闻中心

Blazor WebAssembly 和 Blazor Server 混合应用怎么做

2025-12-14
浏览次数:
返回列表
Blazor混合应用本质是共享代码+分离宿主,需通过Shared类库共用组件与逻辑,WASM与Server项目独立部署并适配差异,不可单项目切换渲染模式。

blazor webassembly 和 blazor server 混合应用怎么做

Blazor WebAssembly 和 Blazor Server 混合应用不是官方直接支持的“单项目双托管模式”,但可以通过合理架构设计,在同一解决方案中**共用组件、业务逻辑和 API 层**,让不同页面或功能模块分别运行在 WASM 或 Server 模式下——本质是“共享代码 + 分离宿主”,而非一个页面同时跑两种模型。

核心思路:共享类库 + 独立宿主项目

不要试图在一个项目里切换渲染模式。正确做法是:

  • 创建一个 Shared 类库(.NET Standard 或 .NET 6+),存放所有可复用内容:Razor 组件(.razor)、服务接口与实现(需注意依赖注入差异)、数据模型、工具方法等
  • 新建两个独立的 Blazor 项目:Blazor WebAssembly App(带托管后端)Blazor Server App
  • 两个宿主项目都引用 Shared 类库,并按各自模型适配:WASM 项目调用 HttpClient 访问 API,Server 项目直接注入服务或调用本地逻辑

组件复用的关键注意事项

不是所有组件都能无修改共用。需主动处理以下差异:

  • JS 互操作:WASM 中 IJSRuntime.InvokeAsync 是异步且网络往返的;Server 中是同步调用(IJSRuntime.InvokeVoidAsync 也走 SignalR)。建议封装抽象层,如定义 IJsHelper 接口,在 Shared 中使用,由各宿主项目提供具体实现
  • 状态管理与生命周期:Server 模式下组件实例长期存活,WASM 中可能随页面刷新重置。避免在组件内缓存跨请求状态,改用 localStorage(WASM)或 CascadingParameter + 父组件管理(Server)
  • 认证与授权:WASM 通常用 JWT 存 localStorage,Server 用 Cookie。Shared 中的 [Authorize] 可共用,但登录逻辑、Token 获取/刷新必须分开实现

如何让部分路由走 WASM、部分走 Server?

不能靠路由配置自动切换,但可通过以下方式“模拟混合”:

美图AI开放平台 美图AI开放平台

美图推出的AI人脸图像处理平台

美图AI开放平台 111 查看详情 美图AI开放平台
  • 反向代理方案(推荐):用 Nginx / YARP / ASP.NET Core 的 Proxy 中间件,把特定路径(如 /admin/*)转发到 Blazor Server 应用,其余走 WASM 托管的后端。用户感知为同一域名下的不同区域
  • 超链接跳转:在 WASM 页面中用 <a href="https://yoursite.com/admin">后台管理</a> 直接跳转到 Server 应用地址(可同域部署降低跨源问题)
  • IFrame 嵌入(慎用):仅适合隔离强、交互少的模块(如报表页),不推荐用于主流程,因失去路由集成、状态共享和 SEO 友好性

调试与部署要点

两个项目独立发布,但需协调好基础配置:

  • API 基地址统一:WASM 项目中 HttpClient.BaseAddress 设为后端 API 地址;Server 项目若也调用外部 API,同样配置一致的客户端
  • 身份验证票据兼容:如果共用 IdentityServer 或 JWT,确保签发方、密钥、有效期等配置完全一致
  • 静态资源路径注意:WASM 需要 wwwroot/_content/{PackageId}/ 加载组件包,Server 则走 _content 中间件自动映射,Shared 类库需标记为 StaticWebAssetBasePath(在 .csproj 中加 <staticwebassetbasepath>_content/Your.Shared</staticwebassetbasepath>

基本上就这些。混合不是为了炫技,而是按场景选型:WASM 适合离线、高并发、低敏感前端;Server 适合实时协作、复杂服务器计算、强会话控制。共享代码能大幅降低维护成本,关键在提前划清边界、封装差异。

以上就是Blazor WebAssembly 和 Blazor Server 混合应用怎么做的详细内容,更多请关注其它相关文章!


# 前端  # nginx  # js  # 复用  # 睢宁网站推广优势  # 离线  # 序列化  # 如何在  # 宁都百度seo优化  # 推广营销思维  # 小红书营销推广小技巧  # 英山网站建设多少钱  # 学校网站建设栏目设置  # 私信推广图片素材库网站  # 黄冈市网站线上推广服务  # 别墅整合营销推广  # 网络seo分金手指六六二九  # 操作指南  # 如何将  # 怎么做  # 类库  # 美图  # red  # .net  # 路由  # proxy  # 后端  # 工具  # app  # seo  # cad  # cookie 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: yandex入口引擎手机版 yandex安卓版下载入口  PHP URL参数传递与500错误调试指南  如何在 Excel Online 和 Google 表格中更改日期格式  机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  PDF文件体积过大处理_PDF压缩技巧详解  QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网  抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  12306选座如何查看座位示意图_12306座位示意图解读与使用  离线运行Go语言之旅:本地部署与GOPATH配置指南  poki网页游戏推荐_poki免费游戏平台入口  J*aScript打印功能_j*ascript输出控制  使用 Pandas 高效处理 .dat 文件:字符清理与数据计算  圆通快递查询实时追踪 圆通物流包裹状态快速查看  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  实现全屏滚动与导航点:专业教程  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  J*aScript DOM操作:高效清空列表元素的策略与实践  支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样  拼多多赚钱渠道_拼多多收益来源  4399免费游戏网址入口 4399小游戏免费入口点开即玩  Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】  手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议  响应式图片在网页设计中的正确实现方法  深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现  Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】  Pyrogram与g4f集成:异步编程实践与常见错误解决  Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!  LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别  12306怎么选座位选到安静区_12306选座安静区域选择策略  2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南  必由学官网入口 必由学教师登录入口  Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式  Golang如何实现容器化日志收集与分析_Golang容器日志收集分析方法  vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法  拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法  字由网在线版登录地址 字由网网页版安全入口  Win11怎么查看电脑配置_Win11硬件配置检测工具使用  Go语言JSON解析深度指南:动态访问与结构体映射实践  Lar*el 8 多关键词数据库搜索优化实践  EMS快递官网app_中国邮政速递物流手机客户端  微信聊天记录怎么加密_微信聊天记录加密方法  妖精动漫免费平台 妖精动漫官网资源观看网址  AO3官网镜像链接 Archive of Our Own同人文在线浏览  处理Kafka消费者会话超时:深入理解消息处理语义与幂等性  快手赚钱渠道_快手收益来源 

搜索