Blazor WebApp交互渲染模式及项目代码分工等技术问询
Blazor Auto模式:服务端与客户端项目区别、代码划分及渲染模式选型
一、服务端与客户端项目的核心区别
- 运行环境:服务端项目(一般命名为
YourApp.Server)运行在服务器上,所有组件逻辑在服务器执行,通过SignalR与浏览器通信;客户端项目(YourApp.Client)是WebAssembly应用,编译后下载到用户浏览器,逻辑在本地执行。 - 渲染逻辑:服务端项目的Razor组件采用服务器端渲染(SSR)+ 实时交互,页面内容由服务器生成后发送给浏览器;客户端项目是纯客户端渲染,首次加载完成后,大部分交互无需再请求服务器。
- 资源访问权限:服务端项目可直接访问服务器本地资源(如数据库、文件系统);客户端项目只能通过HTTP调用外部服务,无法直接触碰服务器本地资源。
二、各类代码的放置建议
服务端项目放这些:
- 后端业务逻辑(如数据库CRUD操作、数据计算处理)
- API接口(
Controller控制器或最小API均可) - 依赖服务器资源的Razor组件(如涉及敏感数据、需直接读取数据库的组件)
- 配置文件(数据库连接字符串、第三方服务密钥)、身份验证的服务端逻辑(如ASP.NET Core Identity)
客户端项目放这些:
- 纯前端交互的Razor组件(如UI组件、表单验证、本地状态管理)
- 前端静态资源(自定义CSS、JS脚本、图片图标)
- 客户端专属服务(如
HttpClient封装、本地存储操作) - 无需服务器参与的前端逻辑(如图表渲染、本地数据过滤排序)
三、GetCities API的实现方式
不一定非要创建CityController.cs,两种常用方案:
- 常规方案:在服务端项目编写API(控制器或最小API都行),客户端通过注入
HttpClient调用该接口获取数据,这是最直接的做法,适合数据需从服务器获取的场景。 - 共享逻辑方案:如果数据获取逻辑可抽象,可将核心逻辑放在默认生成的
YourApp.Shared共享项目中,服务端直接访问数据库,客户端通过HTTP调用服务端接口,共享组件统一处理调用逻辑。但如果只是简单的GetCities,直接用第一种方案更省事。
四、三种渲染模式的适用场景及仪表盘选型
1. Blazor Server(服务端渲染)
- 适用场景:低带宽环境、需快速首屏加载、涉及敏感数据/服务器资源访问、团队更擅长后端开发的项目
- 短板:服务器压力大,每个用户连接都会占用服务器资源,网络断开后无法正常交互
2. Blazor WASM(WebAssembly)
- 适用场景:高交互性应用、需离线运行、想减少服务器压力、前端主导的项目
- 短板:首屏加载慢(需下载整个.NET运行时和应用程序集),无法直接访问服务器本地资源
3. Auto(Server + WASM)
- 适用场景:需兼顾首屏速度和客户端交互性的应用,如电商平台、企业管理系统
- 逻辑:首次请求用服务端渲染快速输出内容,后台悄悄下载WASM资源,后续交互自动切换到客户端模式,同时享受两种模式的优势
仪表盘项目选型
如果是调用自研API展示表格、图表的仪表盘,优先选Auto模式:
- 首屏加载快,用户能立刻看到数据,体验好
- 后续交互在客户端本地执行,减少服务器请求,图表渲染更流畅
- 如果需要离线查看已加载的数据,Auto的WASM部分能实现;要是需要实时数据更新,服务端的SignalR也能支持
内容的提问来源于stack exchange,提问作者Sharpeye500
相关产品推荐
相关产品推荐

