部署在IIS 10上的ASP.NET Core 8.0 Web API间歇性出现404 Not Found
.NET 8 Web API部署IIS后次日出现404错误排查
我近期将一个.NET 8 Web API发布至Windows服务器的IIS上。起初出现“Failed to Load ASP.NET runtime”错误,安装ASP.NET Core Runtime 8.0.5 Windows Hosting Bundle后API运行正常。但次日用Postman调用时出现404 Not Found错误。已做以下排查:
- 开发环境调试运行正常
- 域名指向正确IP
- 应用池未出现在Worker Processes中
- 重启过IIS网站/应用池
- 重启过IIS服务
- Windows事件日志无相关记录
- IIS日志文件基本为空
Web.config内容:
<?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=".\SamadhiAPI.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer> </location> </configuration> <!--ProjectGuid: b7f93657-cfc6-4b8d-91d7-33f7e9e4960b-->
排查建议
- 检查应用池身份权限
确认应用池的运行身份(如ApplicationPoolIdentity、LocalSystem等)是否拥有API发布目录的访问权限。右键发布目录→属性→安全,添加对应身份并赋予读取、执行权限。 - 查看stdout启动日志
Web.config已开启stdoutLogEnabled="true",检查发布目录下的logs文件夹是否生成日志文件。若未生成,手动创建logs文件夹并给应用池身份分配写入权限,重启应用池后再次调用API,通过日志排查启动失败原因。 - 验证AspNetCoreModuleV2注册状态
打开IIS管理器→服务器节点→模块,确认AspNetCoreModuleV2存在。若缺失,重新安装ASP.NET Core Hosting Bundle,安装完成后重启IIS。 - 切换托管模式测试
当前配置使用hostingModel="inprocess",尝试改为outofprocess,保存Web.config后重启应用池,测试API是否可正常访问:<aspNetCore processPath="dotnet" arguments=".\SamadhiAPI.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="outofprocess" /> - 核对网站绑定与路由配置
确认IIS网站的绑定端口、主机名与请求地址完全匹配。同时检查API的路由配置,比如是否存在全局路由前缀、控制器上的路由特性是否正确。 - 验证服务器.NET运行时版本
在服务器命令提示符中执行dotnet --list-runtimes,确认ASP.NET Core 8.0.5运行时已正确安装。 - 检查应用池CLR版本设置
.NET Core应用不依赖传统.NET Framework CLR,需将应用池的.NET CLR版本设置为无托管代码。右键应用池→高级设置→常规→.NET CLR版本,选择对应选项。
内容的提问来源于stack exchange,提问作者Ross Kelly
相关产品推荐
相关产品推荐

