You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置ASP.NET Web Forms自定义404错误页面捕获所有404请求?

嘿,这个问题我熟!你碰到的是ASP.NET Web Forms里一个很典型的场景——默认情况下,ASP.NET只负责处理那些映射到它的请求(比如带.aspx后缀的页面),像localhost/abcd这种不带后缀的路径,请求直接就被IIS接手了,所以你的自定义404页面根本没机会触发。别担心,下面两个方案能帮你搞定所有404错误的捕获:

方案1:通过Web.config让ASP.NET接管所有请求

这种方式适合希望在应用层面统一处理的场景,步骤如下:

  1. 先确保你的web.config的<system.web>节点里已经正确配置了自定义错误:
<system.web>
  <!-- 其他配置 -->
  <customErrors mode="On" defaultRedirect="~/ErrorPages/GeneralError.aspx">
    <error statusCode="404" redirect="~/ErrorPages/NotFound.aspx" />
  </customErrors>
</system.web>
  1. 关键的一步:在<system.webServer>节点里添加配置,让所有请求都经过ASP.NET的托管模块和处理程序:
<system.webServer>
  <!-- 其他配置 -->
  <modules runAllManagedModulesForAllRequests="true" />
  <handlers>
    <add name="NotFoundHandler" path="*" verb="*" type="System.Web.NotFoundHandler" preCondition="integratedMode" />
  </handlers>
</system.webServer>
  • runAllManagedModulesForAllRequests="true":让所有类型的请求都经过ASP.NET的托管模块,确保ASP.NET能感知到这些请求
  • 添加的NotFoundHandler会处理所有路径的请求,保证非.aspx的404也能被ASP.NET捕获并跳转到你的自定义页面
方案2:直接在IIS层面配置自定义错误页面

如果你的应用部署在IIS上,也可以直接在服务器层面配置,这样不管是ASP.NET处理的请求还是IIS直接处理的请求,都会使用你的自定义404页面:

  • 打开IIS管理器,找到你的目标站点,双击「错误页」功能
  • 在列表里找到状态码为404的条目,右键选择「编辑」
  • 选择「响应重定向」选项,输入你的自定义404页面的路径(比如/ErrorPages/NotFound.aspx)
  • 可选:勾选「将确切的URL传递给客户端」,这样浏览器地址栏会显示自定义页面的URL而不是原请求地址
  • 点击确定保存配置

一些注意事项

  • 确保你的自定义错误页面本身能正常访问,不然会出现嵌套错误(比如404页面本身又404了)
  • 测试时记得把customErrors的mode设为On,如果用RemoteOnly,本地测试可能还是会看到IIS默认页面
  • 如果你还在使用IIS经典模式(现在很少见了),配置会略有不同,建议切换到集成模式以获得更好的兼容性

内容的提问来源于stack exchange,提问作者itay312

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:01:05