gmandarin-backend
gmandarin-backend 是一个多宿主、同时覆盖 WebApi、WebSite、JobHost、ClientApp、多时区和 Hangfire 的综合案例。
适合看什么
- 同一业务系统如何拆成多个宿主。
- WebSite 如何托管多个前端入口。
IsIntegrateAspNetAuthentication = true的 API 宿主接法。- 项目级 AutoMapper 时间 resolver。
- 自定义 Hangfire JobActivator 与 WorkContext 生命周期。
关键实践
Clearn.WebApi负责 API,Clearn.WebSite负责 MVC + ClientApp,Clearn.JobHost负责 Job。- WebSite 通过
AddClientApp一次注册多个前端入口。 - WebApi 宿主启用
IsIntegrateAspNetAuthentication = true。 - 项目中存在
CurrentUserTimeResolver、UserLocalTimeResolver、ResloveUTCTimeByGmLocalTimezone等时间转换器。 - 自定义 Hangfire
JobActivator在BeginScope()中创建IServiceScope并显式附着/释放 WorkContext。 - WebSite 宿主同时叠加站点级
UseStaticFiles(...)与UseClientApp(),说明项目级静态资源策略与框架前端托管能力可以并存。 - 同一业务系统里既有框架接管认证的 API 宿主,也有项目显式接入 Cookie 和外部登录的站点宿主。
- 多时区处理通过项目级 AutoMapper resolver 体系落到用户视角时间,而不只停留在 UTC 存储原则。
检查时重点核对
- 多前端入口是否有清晰的
PublicPath、DistPath和后端保护边界。 - 用户视角时间是否通过项目级 resolver 统一处理,而不是在页面散落换算。
- API 宿主和站点宿主是否虽然职责不同,但仍共享统一规则。