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

在IIS部署Angular与ASP.NET Web API到子域名,Angular报404求解决

解决方案:Angular + ASP.NET API 同域名部署404问题

问题根源

根目录web.config中配置了path="*"的ASP.NET Core handler,会拦截所有请求,但ASP.NET Core未正确配置静态文件服务来处理wwwroot中的Angular资源;同时wwwroot下的web.config因根目录location标签的inheritInChildApplications="false"设置无法生效,导致Angular路由和静态文件请求无法被正确处理。

修复步骤

1. 更新ASP.NET Core项目的Startup.cs

确保添加静态文件服务和SPA路由回退逻辑,让ASP.NET Core能正确服务Angular静态文件并处理路由回退:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    // 启用静态文件服务,默认指向wwwroot目录
    app.UseStaticFiles();

    app.UseRouting();

    app.UseCors(); // 确保你的CORS策略已正确配置

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers(); // 映射API控制器路由
    });

    // 配置SPA路由回退,处理Angular单页应用路由
    app.UseSpa(spa =>
    {
        spa.Options.SourcePath = "wwwroot";

        // 生产环境下,所有非API、非静态文件的请求都重定向到index.html
        spa.Options.DefaultPage = "/index.html";
    });
}

2. 调整根目录的web.config

修改handler路径仅拦截API请求,添加静态文件MIME类型配置和Angular路由重写规则:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <!-- 仅处理API路径的请求,静态文件由IIS直接处理 -->
      <add name="aspNetCore" path="api/*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\MyApi.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
    </aspNetCore>
    <!-- 配置Angular所需的MIME类型,避免静态文件无法识别 -->
    <staticContent>
      <mimeMap fileExtension=".json" mimeType="application/json" />
      <mimeMap fileExtension=".js" mimeType="application/javascript" />
      <mimeMap fileExtension=".css" mimeType="text/css" />
      <mimeMap fileExtension=".html" mimeType="text/html" />
      <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
      <mimeMap fileExtension=".ico" mimeType="image/x-icon" />
    </staticContent>
    <!-- 配置路由重写,处理Angular单页应用路由回退 -->
    <rewrite>
      <rules>
        <rule name="Angular Routes" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
            <!-- 排除API路径,确保API请求正常转发到ASP.NET Core -->
            <add input="{REQUEST_URI}" pattern="^/api/" negate="true" />
          </conditions>
          <action type="Rewrite" url="/index.html" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

3. 删除wwwroot目录下的web.config

根目录的配置已覆盖静态文件和路由处理逻辑,子目录的web.config会导致配置冲突,直接删除即可。

额外检查点

  • 确认Angular项目打包后的文件已完整复制到wwwroot目录(包括index.html、main.*.js、styles.*.css等)
  • 确认服务器已安装IIS URL Rewrite模块(重写规则依赖此模块)
  • 确认服务器已安装对应版本的ASP.NET Core Runtime
  • 查看logs/stdout日志,排查ASP.NET Core是否有启动或运行时错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:10:04