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

部署在IIS的ASP.NET+React站点API请求404问题求助

排查方案

1. 确认ASP.NET Core模块在IIS中正确注册

错误显示请求被StaticFile处理程序接管,说明API请求未进入ASP.NET Core管道,需检查:

  • 打开IIS管理器,进入站点的模块,确认存在AspNetCoreModuleV2;
  • 站点对应的应用程序池,将**.NET CLR版本设置为无托管代码**(ASP.NET Core为自托管模式,IIS仅做反向代理)。

2. 修正web.config中的重写规则顺序与逻辑

重写规则需优先匹配API路径,避免被React的fallback规则拦截,确保规则如下(API规则放在最前面):

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <!-- 优先放行API路径,匹配后不再执行后续规则 -->
        <rule name="Skip API for React" stopProcessing="true">
          <match url="^api/(.*)" />
          <action type="None" />
        </rule>
        <!-- React SPA fallback:非文件/目录请求重写到index.html -->
        <rule name="React Fallback" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="/index.html" />
        </rule>
      </rules>
    </rewrite>
    <!-- 确保ASP.NET Core模块配置正确 -->
    <aspNetCore processPath="dotnet" arguments=".\YourAspNetApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
  </system.webServer>
</configuration>

注意:stopProcessing="true"是关键,确保匹配到API路径后不再执行后续的React fallback规则。

3. 验证Program.cs中的中间件顺序与路由配置

ASP.NET Core中间件顺序直接影响请求处理流程,需确保顺序正确:

var builder = WebApplication.CreateBuilder(args);

// 注册控制器服务
builder.Services.AddControllers();

var app = builder.Build();

// 先启用静态文件服务(托管React构建产物)
app.UseStaticFiles();

// 启用路由中间件
app.UseRouting();

// 授权中间件(若项目用到则保留)
app.UseAuthorization();

// 映射API控制器路由
app.MapControllers();

// React SPA fallback路由:所有非API/非静态文件请求指向index.html
app.MapFallbackToFile("index.html");

app.Run();

确认MapControllers()在MapFallbackToFile之前,且已通过AddControllers()注册控制器服务。

4. 启用ASP.NET Core日志排查细节

在web.config中开启标准输出日志,查看API请求的具体错误:
修改<aspNetCore>节点:

<aspNetCore processPath="dotnet" arguments=".\YourAspNetApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />

在站点目录下创建logs文件夹,请求API后查看stdout日志,确认控制器是否被加载、路由是否匹配。

5. 检查IIS URL重写模块是否安装

若服务器未安装URL Rewrite模块,重写规则不会生效:

  • 打开IIS管理器,查看站点的模块列表,确认存在UrlRewriteModule;
  • 若未安装,直接下载微软官方的URL Rewrite模块安装包本地安装即可。

6. 验证目录权限

确保IIS应用程序池的标识(默认是IIS AppPool\你的应用池名称)对C:/MyWebSite目录有读取权限,覆盖ASP.NET程序集文件(.dll)和React构建文件。

7. 排除其他IIS模块干扰

暂时禁用站点的第三方模块(如URLScan、安全防护类模块),测试API请求是否正常,排查是否有模块拦截了/api路径的请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:34:56