2

这是针对 ASP.NET 应用程序的。由于我在 web.config 文件中缺少某些内容,尝试加载应用程序时出现运行时错误。我想显示自定义错误页面,但我担心如果 web.config 中有错误,那么 customerror 属性将不起作用。那正确吗?

在 web.config 中,我有这个:

<system.web>
<customErrors configSource="config\customErrors.config" />
</system.web>

在我的 customError.config 文件中,我有这个:

<?xml version="1.0"?>
<customErrors defaultRedirect="~/ErrorPages/DefaultError.html" mode="On"/>

我还添加了授权属性,认为我需要它。我删除了它,因为它似乎没有任何区别。

<location path="ErrorPages/DefaultError.html">
<system.web>
  <authorization>
    <allow users="*" />
  </authorization>
</system.web>
</location>
<location path="Config/customErrors.config">
<system.web>
  <authorization>
    <allow users="*" />
  </authorization>
</system.web>
</location>

我为样式表和图像添加了更多位置路径。

这是运行时错误: 说明:服务器上发生应用程序错误。此应用程序的当前自定义错误设置阻止查看应用程序错误的详细信息。

它要求我将我的自定义错误设置为关闭或仅远程,并创建一个模式为打开的自定义错误页面,我已经拥有了。

当模式关闭时,错误是:无法加载文件或程序集“AntiXSSModule”或其依赖项之一。该系统找不到指定的文件。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

当我登录应用程序以及登录之前,我的 customerror 页面工作得很好。我也希望能够解决这些类型的错误。这是我在 web.config 中不应该有的行,因为我缺少一些文件/引用,但我希望能够显示 customerror 页面,而不是崩溃。

<add name="ValidateInput" type="AntiXSSModule.ValidateInput, AntiXSSModule"/>

我试图移动我的位置路径,认为这很重要,将它放在给我错误的行的上方和之前。我查看了问题CustomErrors mode="Off",这与我遇到的错误相同,但是添加属性并没有解决问题,当我添加此属性时,配置文件出现错误。

问题是如何捕获由 web.config 文件中的错误导致的错误?我还没有尝试过,但是通过查看我看到的各种问题,我可以将方法添加到我的 global.asax; Application_Exception 或 Application_Error。目前我只有 Application_Start 和 Application_End 方法。

我是 ASP.NET 的新手,想马上使用,有什么建议吗?

4

1 回答 1

0

您应该在其应用程序日志中检查服务器的事件查看器,以了解应用程序无法加载的原因。

通常对于未处理的错误,即应用程序可以预期的异常,您可以使用ELMAH记录并通知您错误。

对于在应用程序中处理的异常,即在 try/catch 中,您可以使用log4net记录并通知您错误。

这两个库都可以将异常记录到数据库中,甚至可以通过电子邮件将异常发送给您。

更新:要明确这一点(考虑到问题是如何捕获由 web.config 文件中的错误导致的错误?),如果您的应用程序配置无效,则应用程序将不会加载,因此将无法提供页面,更不用说错误页面了。您不应该考虑如何捕获应用程序配置错误,而是要弄清楚如何使您的应用程序配置有效,那么您就不会有这个问题。

于 2012-08-12T18:09:22.157 回答