【问题标题】:Custom Error Pages Do Not Work自定义错误页面不起作用
【发布时间】:2015-12-16 20:26:18
【问题描述】:

在试图找出 Global.asax 不起作用的原因时,我决定转向自定义错误并开始在那里遇到问题。我正在测试 404(找不到页面),它一直给我标准的服务器错误页面,而不是我自己的页面。

我尝试在 IIS 方面设置它,但没有奏效。事实上,设置匹配似乎会引发更多错误。我已删除该更改以将其返回到当前问题。我已经提供了我为制作此错误页面所做的更改。或许比我聪明的人能找出问题所在?

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error.aspx" />

任何帮助都会受到广泛赞赏!我确实检查了 Error.aspx 是否存在,它确实存在,所以我知道这不是实际的 404 页面未找到问题

编辑:尝试了建议的重复答案,但没有用

编辑 2:这是屏幕上出现的错误

HTTP 错误 404.0 - 未找到

您要查找的资源已被删除、名称已更改或暂时不可用。

最可能的原因:

  • 指定的目录或文件在 Web 服务器上不存在。
  • 网址包含印刷错误。
  • 自定义过滤器或模块(例如 URLScan)限制对文件的访问。

你可以尝试的事情:

  • 在 Web 服务器上创建内容。
  • 查看浏览器 URL。
  • 检查失败的请求跟踪日志并查看哪个模块正在调用 SetStatus。欲了解更多信息,请点击此处。

详细错误信息:

模块 IIS Web 核心

通知 MapRequestHandler

处理程序 静态文件

错误代码 0x80070002

【问题讨论】:

  • 我不太了解自定义错误的处理方式,所以如果您需要更多信息,请询问!
  • 您的 Error.aspx 页面中也可能存在实际错误。在这种情况下,您应该在 YSOD 顶部附近的某处看到类似“另外,在执行第一个异常的自定义错误页面时发生了另一个异常”之类的内容。您可以尝试使用静态 html 文件(例如 ~/Error.htm)来消除这种可能性。
  • 我已将错误复制并粘贴到主帖中
  • 您使用的是什么版本的 IIS?

标签: c# asp.net


【解决方案1】:

我建议您为此使用一个控制器,例如:

[AllowAnonymous]
    public class ErroHttpController : Controller
    {
        [Route("RequestError")]
        public ActionResult RequestError()
        {
            Response.StatusCode = 400;
            return View();
        }

        [Route("NotFound")]
        public ActionResult NotFound()
        {
            Response.StatusCode = 404;
            return View();
        }

        [Route("InternalError")]
        public ActionResult InternalError()
        {
            Response.StatusCode = 500;
            return View();
        }

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            Response.TrySkipIisCustomErrors = true;
            base.OnActionExecuting(filterContext);
        }
    }
}

在你的 web.config 中你应该这样做:

<customErrors mode="RemoteOnly">
      <error statusCode="400" redirect="/RequestError"/>
      <error statusCode="404" redirect="/NotFound"/>
      <error statusCode="500" redirect="/InternalError"/>
</customErrors>

您必须在 OnActionExecuting 方法中跳过 IIS 自定义错误,如上面的代码。

【讨论】:

  • 我想 OP 使用 WebForms。
  • 看起来确实是网络表单
猜你喜欢
  • 2013-03-06
  • 2012-07-24
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
相关资源
最近更新 更多