如何防止 MVC5 自动将 fTrySkipCustomErrors 标志设置为 true

问题描述

短版
请阅读最底部的问题的简短版本。

情况
在我上周问的一个问题中,我努力寻找解决方案,这使我们的 asp.net 错误可视化防水,因为在某些边缘情况下,asp.net 异常处理失败,因此无法创建适当的异常可视化: How to properly set up ASP.NET web.config to show application specific,safe and user friendly asp.net error messages in edge cases

所需的解决方
作为我在那里描述的方式的替代方法,在我看来,使异常可视化可靠的最佳方法是使用 httpErrors 中的 system.webServer 元素作为故障保存,以便任何错误asp.net 未正确处理,导致基于 httpErrors 元素的设置显示的通用错误页面

要做到这一点,必须有两件事可能:

  • 应用程序正确处理的错误页面必须通过 iis,而不会被通用错误消息替换
  • 无法在 asp.net 中正确处理的错误,必须通过 IIS 替换。

据我所知,这种行为是由 existingResponse="Auto" 元素中的 httpErrors 参数表示的。
ms 文档说明:

仅当设置了 SetStatus 标志时才保持响应不变。

这正是必要的:应用程序中任何成功的错误页面创建(通过 Application_Error 或通过明确定义的错误处理页面)都可以设置 Response.TrySkipIisCustomErrors = true 和 IIS 会让错误页面通过。但是,asp.net 中的应用程序未成功处理的所有其他错误都不会设置该标志,从而获得 httpErrors 元素中指定的错误页面

问题
可悲的是,似乎在 MVC5 应用程序中(我不知道在其他环境中是否存在相同的行为),Response.TrySkipIisCustomErrors (fTrySkipCustomErrors) 似乎自动设置为 [{{1} }],即使它不是由应用程序设置的。

因此我们在同一个地方,就像在我的另一篇文章中一样:如果应用程序的错误处理失败,则无法使用 true 显示特定于应用程序的错误,因为它无法重置existingResponse="Auto" 标志。
作为替代,可以设置 fTrySkipCustomErrors。这就是我们目前所做的,因为我们希望生成带有支持代码和其他有关错误的有用信息的错误页面,以便向用户显示,或者可以使用 existingResponse="Replace",但这不是一种选择,因为它会替换任何错误页面,因此我们无法向用户显示任何特定于错误的信息,例如之前提到的支持代码

问题简述
因此,问题是,如何确保 MVC5 (asp.net) 不会自动existingResponse="Passthrough" 标志设置为 fTrySkipCustomErrors,因为在某些情况下,没有应用程序代码被执行,因此 {{ 1}} ([true]) 不能设置为 false,这会导致 Response.TrySkipIisCustomErrors 参数没有实际意义。

要检查 ASP.NET MVC5 异常处理失败但 fTrySkipCustomErrors 标志设置为 true 的情况,请从您的 MVC5 应用程序请求以下页面

existingResponse="Auto"

请注意:我对禁用上述错误不感兴趣。这是一个例子。我希望错误可视化可靠,而不必规避可能会破坏 asp.net 错误处理机制的每个错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)