部署.NET 5 Web API至IIS出现404错误,求排查方向
兄弟,我之前也踩过.NET 5 Web API部署IIS出404的坑,而且刚好也是MVC项目正常、API不行的情况,给你分享几个我亲测有效的排查方向:
核心排查步骤
1. 先盯死应用程序池的CLR版本
这是最容易踩的坑!.NET Core应用的IIS应用程序池必须设置为无托管代码,因为它不依赖传统的.NET Framework CLR。
- 操作路径:IIS管理器 → 你的API站点 → 对应应用程序池 → 右键「高级设置」→ .NET CLR版本,选择
无托管代码 - 别和MVC项目搞混了,你的.NET 5 MVC其实也应该设成无托管代码,只是它有默认首页/静态页面,所以没暴露问题
2. 确认API路由的访问方式(别瞎访问根目录!)
Web API默认没有根页面,直接访问站点根URL(比如http://yourserver/)肯定会404,这和MVC有默认首页完全不一样!
- 先在本地调试时确认正确的API路由:比如你的控制器加了
[Route("api/[controller]")],那访问地址应该是http://yourserver/api/xxx(xxx是控制器名) - 检查
Program.cs/Startup.cs里的路由配置:确保有app.MapControllers()(或UseEndpoints里配置了控制器路由),控制器上的[ApiController]和[Route]属性没写错
3. 验证.NET 5托管捆绑包是否真的生效
虽然你说装了捆绑包,但有时候安装后没重启IIS,模块根本没加载:
- 打开IIS管理器 → 你的站点 → 「处理程序映射」,看看有没有名为
aspNetCore的条目,类型是Microsoft.AspNetCore.Server.IISIntegration.AspNetCoreModuleV2 - 如果没有这个条目:重新下载.NET 5托管捆绑包安装,安装完成后打开管理员命令提示符,运行
iisreset重启IIS,再检查 - 也可以手动查看
web.config里的aspNetCore节点,确保module="AspNetCoreModuleV2"是存在的
4. 开启日志抓具体错误
笼统的404没意义,得看底层到底出了啥问题:
- 开启IIS详细错误:站点 → 「错误页」→ 「编辑功能设置」→ 选择「详细错误」,这样访问时会显示更具体的错误信息(比如路由匹配失败、应用启动失败)
- 开启.NET Core stdout日志:在站点目录的
web.config里,把stdoutLogEnabled改成true,设置stdoutLogFile路径(比如.\logs\stdout),部署后访问API,日志文件会生成在指定目录,里面能看到应用启动时的异常(比如依赖缺失、配置错误)
5. 检查Web.config配置和权限
- 对比MVC项目的
web.config,重点看aspNetCore节点:确保processPath="dotnet",arguments是你的API DLL文件名(比如.\YourApiProject.dll) - 权限排查:应用程序池的身份(比如
ApplicationPoolIdentity)有没有站点目录的读写权限?右键站点文件夹 → 「属性」→ 「安全」→ 添加IIS AppPool\你的应用程序池名称,给它读写权限,权限不足会导致应用启动失败,表现为404
最后一招:重启服务器
有时候安装完托管捆绑包,光重启IIS不够,得重启整个服务器让模块彻底加载,我之前就是这么解决的!
内容的提问来源于stack exchange,提问作者Starlin González
相关产品推荐
相关产品推荐

