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

ASP.NET Boilerplate项目将Angular产物部署到API wwwroot的配置问题

ASP.NET Boilerplate + Angular 单端口同域部署配置方案

Angular静态资源与.NET Core API完全可以运行在同一个端口,按以下步骤配置即可解决所有异常问题:

1. 前置Angular打包配置

  • 打开Angular项目的environment.prod.ts,修改apiBaseUrl为空字符串,不要写死带端口的地址,让接口请求走当前部署域的相对路径
  • 执行打包命令时指定基础路径:ng build --prod --base-href /,确保打包后静态资源的引用路径正确
  • 把dist目录下所有文件直接复制到.NET Core API项目的wwwroot目录下,不要嵌套多余的子文件夹

2. .NET Core 中间件配置

中间件的顺序会直接影响路由匹配结果,Configure方法请按以下顺序配置:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
    // 优先配置默认文件,访问根路径时自动匹配加载index.html
    app.UseDefaultFiles();
    // 托管wwwroot下的静态资源,包含Angular打包产物
    app.UseStaticFiles();
    
    // 按ABP默认要求配置CORS、认证、授权中间件,需放在路由之前、静态文件配置之后
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
    
    // 配置API端点路由,ABP动态API会自动注册到该规则中
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });

    // 关键:Angular路由回退规则,所有非API、非静态资源的请求都返回index.html,交给前端路由处理
    app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api") && 
                     !x.Request.Path.Value.StartsWith("/swagger") &&
                     !x.Request.Path.Value.StartsWith("/Abp") &&
                     !x.Request.Path.Value.StartsWith("/.well-known"), 
        builder =>
        {
            builder.UseRouting();
            builder.Run(async context =>
            {
                context.Response.ContentType = "text/html";
                await context.Response.SendFileAsync(Path.Combine(env.WebRootPath, "index.html"));
            });
        });

    // 测试阶段已关闭HTTPS的请移除app.UseHttpsRedirection()配置
}

3. 遗留问题修复

登录接口400报错

  • 检查appsettings.json中的ServerRootAddress、ClientRootAddress配置为当前部署的域名/地址,两个地址保持完全一致
  • 确认Angular打包后的index.html中<base href="/">配置正确,没有多余的子路径

手动输入前端路由404

上述路由回退规则已经覆盖该场景,所有匹配不到静态文件和API接口的请求都会返回index.html,Angular路由会自动处理对应页面跳转,不需要额外配置URL重写模块

AbpUserConfiguration接口200但内容异常

该异常是因为之前没有配置路由回退的排除规则,接口请求被误返回了index.html的内容,上述配置中已将/Abp开头的接口路径排除在回退规则外,请求会正常进入接口处理逻辑返回JSON格式数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:24:01