IIS 7.5下.NET Core子应用API部署后出现404 NotFound问题
解决IIS 7.5上.NET Core子应用API 404 NotFound问题
针对主应用正常、子应用API部署后出现404的问题,按以下步骤排查修复:
1. 修正子应用路由配置
你的子应用控制器使用了属性路由[Route("wps/status/{id}")],但Startup里的全局路由配置与属性路由存在冲突,导致请求无法正确匹配。修改Startup.cs的Configure方法中端点配置,直接映射所有带属性路由的控制器:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他代码保持不变 app.UseEndpoints(endpoints => { // 替换原有的MapControllerRoute,改用MapControllers支持属性路由 endpoints.MapControllers(); }); }
2. 确认前端请求路径正确性
检查主应用中pollStatusUri的取值,必须指向子应用的完整路径:
- 错误写法:
"/wps/status/123"(会指向主应用路由,导致404) - 正确写法:
"/Toolbox-WPS/wps/status/123"(明确指定子应用名称)
3. 调整子应用程序池设置
.NET Core应用不能使用.NET Framework 4.0的应用程序池,需改为无托管代码:
- 打开IIS管理器,找到Toolbox-WPS的应用程序池
- 右键选择“高级设置”,将
.NET Framework版本改为无托管代码 - 身份保持
ApplicationPoolIdentity即可
4. 验证子应用部署文件完整性
确保服务器上的子应用部署目录包含:
- 正确的
web.config文件(由.NET Core发布自动生成,配置AspNetCoreModule反向代理),示例配置:
<?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=".\Toolbox-WPS.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer> </location> </configuration>
- 所有发布生成的dll、runtime依赖文件,若缺失会导致应用无法启动,引发404
5. 检查目录权限
确保IIS AppPool\Toolbox-WPS用户对子应用部署目录拥有读取和执行权限:
- 右键部署目录 → 属性 → 安全 → 添加用户
IIS AppPool\Toolbox-WPS - 赋予该用户“读取和执行”、“列出文件夹内容”、“读取”权限
6. 启用日志排查细节
若以上步骤无效,开启子应用的stdout日志定位问题:
- 修改
web.config中stdoutLogEnabled="true" - 在部署目录下创建
logs文件夹 - 触发API请求后,查看
logs/stdout日志,可获取应用启动或请求处理的具体错误信息
内容的提问来源于stack exchange,提问作者Samra
相关产品推荐
相关产品推荐

