【问题标题】:IIS7 - combination of ASP.NET customErrors, IIS httpErrorsIIS7 - ASP.NET customErrors、IIS httpErrors 的组合
【发布时间】:2012-01-09 15:51:24
【问题描述】:

我在 StackOverflow 和其他网站上看到了许多与此类似的问题,但似乎没有任何方法可以解决我遇到的问题。

我正在尝试将站点配置为针对 ASP.NET 错误返回 500 状态代码和自定义错误页面(静态 HTML 文件),这些错误通常会返回 500(其中 customErrors 设置为“关闭”)和 404 状态我们系统报告为未找到的页面的代码(404 页面不是通过 IIS 设置的静态页面,它是由我们的 CMS 系统生成的)。

我已经到了那里,但我遇到了一点砖墙。

目前,我能够返回正确的 404 状态代码,其中我们的系统返回带有 404 状态代码的页面,但我现在无法为 ASP.NET 服务器错误返回 500 状态代码。我通过设置 Response.TrySkipIisCustomErrors = true 来管理它。然而,我的 500 个错误被证明更加复杂。如果我从 web.config 中删除 customErrors 配置部分,我会收到 500 错误,但这是丑陋的 ASP.NET YSOD。我似乎根本无法让它指向使用 IIS 的自定义页面,无论我对 httpErrors 配置部分使用什么设置,也无论我通过 IIS GUI 设置什么。如果我重新添加 customErrors 部分,我会得到我期望的自定义​​错误页面,但我会收到 200 或 302 错误(取决于 redirectMode 属性的值)。

有人有什么想法吗?

就 httpErrors 配置部分而言,到目前为止我已经尝试了以下方法:

将 errorMode 设置为“Custom”,并为 statusCode 为“500”和 subStatusCode 为“-1”的错误指定我的静态内容(首先删除现有的 500 错误) 将 errorMode 设置为“Detailed”并为 statusCode 为“500”和 subStatusCode 为“-1”的错误指定我的静态内容(首先删除现有的 500 错误) 为上述两个配置选项设置 existingResponse="PassThrough"。

【问题讨论】:

  • 我在 IIS7.0 和 IIS7.5 上都有相同的行为。几个小时后,我会在回到办公室后发布当前 web.config 中的相关信息。
  • 恕我直言,用真实样本完成问题和答案。

标签: asp.net iis-7 custom-errors


【解决方案1】:

如果我理解正确的话,您似乎可能超出了您需要做的事情。 Here is a good link

您似乎需要处理 global.asax Application_Error 事件。这样你就可以随心所欲地处理它,而且你不会得到那个丑陋的 asp.net 错误屏幕。我创建的任何网络应用程序都会在其中放置一些代码来处理错误,这样用户就不会看到任何未格式化的“爆炸”

【讨论】:

  • 我们实际上正在运行一个 HttpModule,它已经在 Application_Error 处理程序中进行自定义日志记录,但是当出现重大问题时,我们仍然需要抛出 500 错误,因为我们的客户端使用查找 500 状态的工具代码来指示来自多个站点的主要问题,因此我们需要将它们抛出以保持一致,但我们不希望最终用户看到 YSOD,因为我们有一个非常好的人类可读错误页面来保持 UX 一致并保持远离窥探的潜在错误的细节。
  • 你能发布一些代码吗?我已经做了很多这种类型的错误处理,看起来它不应该这么困难。没有一些代码很难确定它。
猜你喜欢
  • 2011-04-03
  • 2018-04-30
  • 2011-01-29
  • 2011-05-27
  • 2014-08-19
  • 2010-09-30
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多