在这种情况下,我将不胜感激任何帮助。
我有一个在 IIS 上运行的 .NET Framework 4.5.1 Web 应用程序。我在这个应用程序的根目录中有两个物理文件:
错误404.html
错误500.html
在“system.web”下的 web.config 中,我创建了此配置以提供来自 .NET Framework 的自定义错误页面:
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="/Error404.html" />
<error statusCode="500" redirect="/Error500.html" />
</customErrors>
在“system.webServer”下的 web.config 中,我创建了此配置以从 IIS Web 服务器提供自定义错误页面:
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="404" path="/Error404.html" responseMode="ExecuteURL"/>
<error statusCode="500" path="/Error500.html" responseMode="ExecuteURL"/>
</httpErrors>
我的目标是防止从互联网(互联网用户)看到详细的错误。但是我想在我的本地主机上查看详细的错误。
所以到目前为止,一切都运行良好。但是,当我将 web.config 中的连接字符串更改为不存在的主机(TCP 提供程序,错误:0 - 不知道这样的主机。)时,这些自定义错误页面的规则不再起作用。
从互联网上我收到此错误,而不是我的自定义错误页面:
Server Error in '/' Application.
Runtime Error
Description: An exception occurred while processing your request. Additionally, another exception occurred while executing the custom error page for the first exception. The request has been terminated.
为什么我无法从互联网上看到我的自定义错误页面?
好吧,我想我现在明白了: 我无法提供自定义错误页面,因为整个应用程序池已损坏。所以 .NET 或 IIS 作为 Web 服务器不能做任何事情 - 没有重定向,没有执行 url,没有文件内容服务,什么都没有......这是因为应用程序池本身不工作。要使自定义错误页面正常工作,应用程序池必须正在运行。就我而言,应用程序池未运行,因为在应用程序池初始化期间,出现异常导致应用程序池损坏/未运行。
我现在想到的唯一方法是使用反向代理服务器,我可以在其中设置自定义错误页面,以防后端无法像在这种情况下那样工作。