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

Web.config错误页面路由异常:404/500跳转问题排查

解决IIS自定义404/500错误页面跳转异常问题

看起来你用IIS的<httpErrors>配置了自定义错误跳转,但遇到了异常情况。结合我之前踩过的坑,大概率是下面两种常见问题,对应给你解决方案:

第一种异常:自定义页面显示正常,但HTTP状态码变成200(而非404/500)

这种情况对SEO非常不友好,搜索引擎会误以为这个页面是正常存在的。原因是ExecuteURL模式下,IIS默认会把响应状态码改成200。解决办法很简单,在对应的MVC Action里手动设置状态码,并告诉IIS不要覆盖:

public ActionResult PageNotFound()
{
    // 保留404状态码
    Response.StatusCode = 404;
    // 阻止IIS替换我们设置的状态码
    Response.TrySkipIisCustomErrors = true;
    return View();
}

// 500错误页同理
public ActionResult InternalServerError()
{
    Response.StatusCode = 500;
    Response.TrySkipIisCustomErrors = true;
    return View();
}

第二种异常:跳转后出现空白页,或者提示“无法找到资源”

这种情况一般是路由或视图配置出了问题,你可以按以下步骤排查:

  • 先确认HomeController里确实存在PageNotFound和InternalServerError这两个Action方法,且没有拼写错误
  • 检查对应的View文件是否存在于~/Views/Home/目录下(比如PageNotFound.cshtml)
  • 如果你的项目有自定义路由规则,确保没有拦截/Home/PageNotFound这类请求
  • 另外,检查web.config里的<httpErrors>是否放在<system.webServer>节点下,这个位置错了配置是不生效的

额外配置建议:结合ASP.NET的<customErrors>节点

为了覆盖更多场景(比如MVC请求的错误和静态文件的错误),建议同时在<system.web>节点下配置<customErrors>作为补充:

<system.web>
    <customErrors mode="On" defaultRedirect="~/Home/InternalServerError">
        <error statusCode="404" redirect="~/Home/PageNotFound" />
    </customErrors>
</system.web>

<customErrors>是ASP.NET框架层面的处理,<httpErrors>是IIS层面的,两者配合能让你的错误页覆盖所有请求类型。

最后再提醒一句:不要在IIS管理器里手动设置错误页,保持web.config的配置和IIS后台一致,避免出现配置冲突。

内容的提问来源于stack exchange,提问作者Bradley William Elko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:31:25