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

ASP.NET Core 6 Web API部署IIS 10遇404错误求助

ASP.NET Core 6 Web API IIS部署404问题排查与解决方案

核心问题定位

你当前遇到的404问题,核心原因是IIS未正确托管ASP.NET Core应用,而是因启用Directory Browsing优先展示文件列表,同时可能存在ANCM配置、应用池设置或代码环境限制的问题。

逐个解答你的疑问

1. 是否需要进行代码配置?

需要针对Swagger和路由做调整:

  • Swagger环境限制:默认Swagger仅在Development环境启用,IIS部署默认是Production环境,需修改Program.cs让Swagger在生产环境也能访问(仅服务器本地调用的场景下安全):
    if (app.Environment.IsDevelopment() || app.Environment.IsProduction())
    {
        app.UseSwagger();
        app.UseSwaggerUI();
    }
    
  • 路由验证:确保API控制器添加了[ApiController]特性,且路由模板匹配你的访问路径(比如[Route("[controller]/[action]")]),避免路由不匹配导致404。

2. IIS如何运行应用?是否运行可执行文件?

IIS通过ASP.NET Core Module (ANCM) 托管ASP.NET Core应用,启动逻辑分两种情况:

  • 框架依赖部署:ANCM调用dotnet命令运行主DLL(如YourApp.dll)
  • 独立部署:ANCM直接运行发布生成的EXE文件(如YourApp.exe)
    ANCM作为中间层,负责请求转发、进程管理,将IIS的请求传递给应用内置的Kestrel服务器。

3. IIS是否遗漏配置?

是的,以下关键配置必须补充:

  • 禁用Directory Browsing:你当前启用了该功能,导致IIS优先展示文件列表而非托管应用,需在站点“功能视图”中找到Directory Browsing并禁用。
  • 验证ANCM模块:在IIS服务器的“模块”中确认存在AspNetCoreModuleV2,若缺失需重新安装.NET 6 Windows Server Hosting包,安装后执行iisreset重启IIS。
  • 应用池配置:
    • 将应用池的**.NET CLR版本设置为无托管代码**(ASP.NET Core不依赖IIS托管运行时)
    • 确保应用池身份(如ApplicationPoolIdentity)拥有发布文件夹的读写权限,可手动添加IIS AppPool\你的应用池名称用户并赋予权限。
  • 检查Web.config:发布生成的Web.config需正确配置ANCM,示例如下(框架依赖部署):
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <handlers>
            <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
          </handlers>
          <aspNetCore processPath="dotnet" arguments=".\YourApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
        </system.webServer>
      </location>
    </configuration>
    
    若Web.config异常,可重新发布项目生成正确配置。
  • 启用日志排查:将Web.config中stdoutLogEnabled设为true,在发布文件夹下创建logs目录,查看日志文件定位具体错误。

4. IIS寻找可执行文件还是DLL?

取决于你的发布方式:

  • 框架依赖部署(默认):IIS通过ANCM调用dotnet命令加载主DLL
  • 独立部署:ANCM直接运行发布生成的EXE文件
    Web.config中的processPath和arguments字段会明确指定启动方式,发布时自动生成对应配置。

5. IIS如何识别主DLL?

发布时,项目的主DLL(与项目同名)会被写入Web.config的arguments字段,ANCM根据该配置加载启动;同时发布输出的.deps.json文件包含应用依赖和入口信息,ANCM会读取该文件确保正确加载应用。

额外配置建议

  • 限制本地访问:将IIS站点绑定的IP地址从“All Unassigned”改为127.0.0.1,确保仅服务器本地能访问API。
  • 端口占用检查:用命令netstat -ano | findstr :8080检查8080端口是否被占用,若占用需更换端口或结束占用进程。
  • 重启生效:修改任何配置后,重启应用池或执行iisreset命令,确保配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:16:33