You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor WASM ASP.NET Core托管模式下能否配置多个独立Server项目?

结论

完全可行,这是垂直切片架构在ASP.NET Core托管Blazor WASM场景下非常成熟的落地方案。


实现方式

你不需要将多个业务服务项目都设为启动项,仅需设置一个统一的宿主项目作为入口即可:

  1. 项目类型调整:将Project.Server.Users、Project.Server.Orders、Project.Server.Customers这类业务域服务项目设置为类库项目,而非Web项目,仅保留一个单独的Project.Server.Host作为Web类型的启动宿主项目。
  2. 控制器自动发现配置:ASP.NET Core默认只会扫描当前入口程序集的控制器,要让宿主项目识别其他引用程序集中的控制器,需要在宿主项目的Program.cs中显式注册业务程序集:
// 注册所有业务服务项目的程序集,让ASP.NET Core能扫描到对应的控制器
builder.Services.AddControllers()
    .AddApplicationPart(typeof(Project.Server.Users.SomeUsersType).Assembly)
    .AddApplicationPart(typeof(Project.Server.Orders.SomeOrdersType).Assembly)
    .AddApplicationPart(typeof(Project.Server.Customers.SomeCustomersType).Assembly);

配置完成后,所有业务项目中的控制器路由规则和单Server项目的规则完全一致,Blazor Client端调用接口无需做任何额外适配。


推荐的最终项目结构

  • Project.Client:Blazor WASM前端项目,和默认模板的作用一致
  • Project.Shared:前后端共用的DTO、枚举、常量等公共定义
  • Project.Server.Shared:所有服务端共用的基础设施,包括鉴权逻辑、全局过滤器、通用工具类、数据库配置基类等
  • Project.Server.Users/Project.Server.Orders/Project.Server.Customers:各业务域独立服务项目,仅包含对应业务的控制器、领域逻辑、数据访问、实体配置等内容
  • Project.Server.Host:统一启动宿主项目,仅包含Program.cs、配置文件、静态文件托管逻辑,不包含任何业务代码,仅引用所有业务服务项目和Project.Server.Shared

注意事项

  • 避免业务服务项目之间直接互相引用,跨域业务调用建议通过公共事件、共享基础设施层或者接口依赖实现,避免破坏垂直切片的隔离性
  • 不同业务域的控制器建议加上业务前缀路由,比如用户模块控制器统一加[Route("api/users/[action]")],避免出现路由冲突
  • 如果使用EF Core,可以将各业务域的DbContext拆分到对应业务服务项目中,在宿主项目统一注册即可

内容的提问来源于stack exchange,提问作者briddums

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:57:00