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,每个包含PublicPath、DistPath、DefaultPage等信息。OverrideDefaultStaticFileOptions:框架会统一重写静态资源响应头为Cache-Control: no-cache,并移除Expires。
请求管道
app.UseClientApp();
框架会为每个前端应用:
- 调用
UseSpaStaticFiles暴露静态资源; - 通过
SpaDefaultPageMiddleware拦截未命中的路径并返回指定DefaultPage; - 自动处理尾部
/,若访问/manager会 301 到/manager/,确保相对路径资源加载正常。
开发联调
SpaProxy(参见AgileLabs.SpaProxies.SpaProxy)提供 HTTP/WebSocket 代理,便于本地指向前端开发服务器。- 可在
ClientAppOptions中设置pathMatch,仅在指定路径下启用代理。
部署建议
- 缓存策略:框架默认重写为
Cache-Control: no-cache并移除Expires;如需其他策略,应在统一静态文件配置中显式覆盖。 - 鉴权控制:在挂载
UseClientApp前后插入自定义中间件,保护敏感路径(如后台管理)。 - Nginx/网关:如需 CDN,可以把
/manager、/portal等路径直接指向 ASP.NET Core 服务或静态站点。
相关阅读: