将ASP.NET MVC从IIS Express切换至Local IIS时出现404资源加载失败错误
解决Local IIS托管ASP.NET MVC仅主页可访问的404问题
老哥,这种情况我经手过好多次,核心问题基本都围绕IIS的路由支持、模块配置或者应用池设置来的,给你列几个针对性的排查和解决步骤,你挨个试:
1. 确认URL重写模块已安装
ASP.NET MVC的路由规则完全依赖IIS的URL重写模块,没装的话除了静态主页,其他控制器路由都会直接返回404。
- 打开IIS管理器,选中服务器节点,点击右侧的「模块」,查找
UrlRewriteModule; - 如果找不到,去控制面板→程序和功能→「启用或关闭Windows功能」,展开「Internet Information Services」→「万维网服务」→「应用程序开发功能」,勾选「URL重写」后完成安装。
2. 匹配应用池的.NET版本与模式
应用池的配置不对是重灾区:
- 右键你的IIS应用→「管理应用程序」→「高级设置」,查看当前绑定的应用池;
- 找到该应用池,右键→「高级设置」:
- .NET CLR版本必须和你的MVC项目版本匹配(比如项目用.NET Framework 4.8就选
v4.0.30319); - 托管管道模式必须设为「集成」,经典模式不支持MVC的路由机制。
- .NET CLR版本必须和你的MVC项目版本匹配(比如项目用.NET Framework 4.8就选
3. 检查Web.config的关键配置
打开项目的Web.config,确认以下几点:
- 确保
system.webServer节点下有这个配置,让所有请求都经过ASP.NET模块:<modules runAllManagedModulesForAllRequests="true" /> - 验证路由注册是否正确:如果是传统MVC项目,检查Global.asax里的
RegisterRoutes方法是否有默认路由:
如果是Owin/ASP.NET MVC 5+,检查Startup.cs里的路由配置是否完整。routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
4. 修复Handler Mappings与ASP.NET注册
有时候IIS的ASP.NET映射会出问题:
- 在你的IIS应用下,点击右侧的「处理程序映射」,确认
ExtensionlessUrlHandler-Integrated-4.0是启用状态; - 如果找不到这个映射,打开管理员权限的命令提示符,运行对应版本的ASP.NET注册命令:
64位系统请替换为%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -iFramework64目录。
5. 启用IIS的ASP.NET功能
如果是第一次用Local IIS,可能对应的Windows功能没开:
- 回到「启用或关闭Windows功能」,展开「Internet Information Services」→「万维网服务」→「应用程序开发功能」,勾选对应版本的「ASP.NET」(比如ASP.NET 4.8),保存后重启IIS。
要是这些步骤都试过还是没解决,你可以把Web.config里的system.webServer和路由注册代码贴出来,再补充下应用池的具体配置,我帮你再深挖问题。
内容的提问来源于stack exchange,提问作者marczulajtis




