agilelabs-fx-docs main features/clientapp.md

ClientApp(多前端托管)

本页提供实现说明与配置示例。团队规范请优先阅读 前端托管

AgileLabs.AspNet.ClientAppServices 允许在同一个 ASP.NET Core 进程中托管多个前端应用(SPA)。适用于:

  • 后端 + 管理端 + 营销站点打包至同一 Docker 镜像;
  • 通过反向代理统一访问路径,降低部署复杂度;
  • 需要在中间件链路中追加自定义逻辑(鉴权、缓存头等)。

注册 ClientApp

// Program.cs
services.AddClientApp(options =>
{
    options.RootPath = "ClientApp"; // 所有前端构建文件存放目录
    options.ClientApps.Add(ClientAppConfig.Create("/manager", "BackManager"));
    options.ClientApps.Add(ClientAppConfig.Create("/portal", "Portal"));
});

配置项说明

  • RootPath:前端发布目录的根路径,通常与项目中的 ClientApp 文件夹对应。
  • ClientApps:可注册多个 ClientAppConfig,每个包含 PublicPathDistPathDefaultPage 等信息。
  • OverrideDefaultStaticFileOptions:框架会统一重写静态资源响应头为 Cache-Control: no-cache,并移除 Expires

请求管道

app.UseClientApp();

框架会为每个前端应用:

  1. 调用 UseSpaStaticFiles 暴露静态资源;
  2. 通过 SpaDefaultPageMiddleware 拦截未命中的路径并返回指定 DefaultPage
  3. 自动处理尾部 /,若访问 /manager 会 301 到 /manager/,确保相对路径资源加载正常。

开发联调

  • SpaProxy(参见 AgileLabs.SpaProxies.SpaProxy)提供 HTTP/WebSocket 代理,便于本地指向前端开发服务器。
  • 可在 ClientAppOptions 中设置 pathMatch,仅在指定路径下启用代理。

部署建议

  1. 缓存策略:框架默认重写为 Cache-Control: no-cache 并移除 Expires;如需其他策略,应在统一静态文件配置中显式覆盖。
  2. 鉴权控制:在挂载 UseClientApp 前后插入自定义中间件,保护敏感路径(如后台管理)。
  3. Nginx/网关:如需 CDN,可以把 /manager/portal 等路径直接指向 ASP.NET Core 服务或静态站点。

相关阅读: