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,示例如下(框架依赖部署):
若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=".\YourApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer> </location> </configuration> - 启用日志排查:将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
相关产品推荐
相关产品推荐

