IIS中.NET应用无法运行,默认网站及子应用访问报404 NOT FOUND
排查IIS上.NET应用404 NOT FOUND问题的步骤
我之前也踩过IIS部署.NET应用的404坑,结合你描述的情况——能访问localhost/IP但默认网站下的应用全报错,咱们一步步来定位问题:
1. 先确认站点基础配置是否正确
- 物理路径校验:打开IIS管理器,右键「默认网站」→「管理网站」→「高级设置」,核对「物理路径」是不是完全指向你部署的.NET应用根目录?别小看这个,我之前就因为路径少了个文件夹后缀,折腾了半小时。另外检查这个文件夹有没有被误删,或者路径里包含特殊字符(比如中文空格)。
- 绑定规则检查:右键「默认网站」→「编辑绑定」,看看绑定列表里有没有匹配你访问时用的地址?比如你用域名访问,但绑定里只加了localhost或者特定IP,IIS就会找不到对应的站点,直接返回404。
2. 核对.NET版本与应用池配置
- 应用池.NET版本匹配:切换到「应用程序池」,找到默认网站对应的应用池,右键→「高级设置」,查看「.NET CLR版本」:
- 如果是.NET Core/.NET 5+应用,必须选「无托管代码」;
- 如果是.NET Framework应用,要选对应版本(比如.NET 4.8对应v4.0.30319)。
版本不匹配的话,IIS根本没法正确解析你的应用,404是常有的事。
- 确认IIS模块安装:打开「控制面板」→「程序和功能」→「启用或关闭Windows功能」,展开「Internet Information Services」→「应用程序开发功能」,确保对应.NET版本的模块已勾选(比如ASP.NET 4.8、.NET Extensibility 4.8等)。
3. 排查文件与权限问题
- 应用池身份权限:应用池的运行身份需要有应用文件夹的读取+执行权限。右键应用池→「高级设置」,看「标识」:
- 如果用的是默认的「ApplicationPoolIdentity」,右键应用物理路径文件夹→「属性」→「安全」,添加用户「IIS AppPool\你的应用池名称」,给它「读取」「读取和执行」权限;
- 如果用的是自定义账户,确保这个账户有对应的文件夹权限。
- 匿名访问设置:打开默认网站的「身份验证」,确认「匿名身份验证」是启用状态,并且匿名用户身份设置为「应用池身份」或者「IUSR」(根据你的部署场景选)。
4. 针对.NET路由/重写的专项排查
如果你的应用是MVC、Razor Pages或者Web API这类依赖路由的应用:
- 检查URL重写模块:确认IIS已安装「URL重写」模块(可以在IIS管理器的模块列表里找),没有的话去微软官网下载安装。
- 验证静态文件访问:在应用根目录放一个简单的
test.html文件,访问http://你的访问地址/test.html:- 如果能打开:说明物理路径和权限没问题,问题出在.NET应用的路由配置或者ASP.NET模块转发上,检查
web.config(.NET Framework)或者.NET Core的web.config里的ASP.NET Core模块配置是否正确; - 如果还是404:回到前面的物理路径和权限排查,大概率是这里出问题了。
- 如果能打开:说明物理路径和权限没问题,问题出在.NET应用的路由配置或者ASP.NET模块转发上,检查
5. 用IIS日志精准定位
开启详细错误日志:打开默认网站的「日志」,设置日志格式为W3C,然后访问出错的URL,去默认日志目录C:\inetpub\logs\LogFiles里找对应的日志条目。日志里的sc-status和sc-substatus会给出更具体的错误代码(比如404.0是文件不存在,404.13是请求内容过长),根据这个代码能更快找到根源。
内容的提问来源于stack exchange,提问作者Soulef
相关产品推荐
相关产品推荐

