代码之家  ›  专栏  ›  技术社区  ›  Heinzi

集中化ASP.NET错误处理:<customErrors>与应用程序错误。两者都可以用吗?

  •  4
  • Heinzi  · 技术社区  · 14 年前

    目前,我们正在通过 Application_Error global.asax.vb :

    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        OurLibrary.HandleError(Me)
    End Sub
    

    HandleError

    Public Shared Sub HandleError(httpApp As HttpApplication)
        ''# do some logging
        ...
    
        ''# show some details about the error and information about how to contact us
        httpApp.Response.Write(...)
    
        httpApp.Response.StatusCode = 404 or 500
        httpApp.Server.ClearError()
    End Sub
    

    Server.ClearError 是必要的,否则默认ASP.NET错误处理启动并显示用户——这取决于 <customErrors> <自定义错误> 可以关闭。

    ClearError 我不能再使用 <自定义错误> ASP.NET vulnerability ,建议的解决方法是使用 < .

    我知道我需要 customErrors 并在 defaultRedirect

    有可能吗 有规律的 应用程序中的错误处理\u错误,但仍允许它被 <自定义错误> ? 这是最佳实践还是我做错了什么?

    PS:我们的许多应用程序都托管在客户的服务器上(而不是我们自己的服务器),所以“将所有信息放在应用程序日志中,不向用户显示任何信息”并不是一个真正的选项。


    解决方案 :替换 httpApp.Server.ClearError() 具有

    If Not HttpContext.Current.IsCustomErrorEnabled Then httpApp.Server.ClearError()
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   Heinzi    14 年前

    就我个人而言,大多数时候我看到人们选择了一种类似于你所做的方法。按你的方式做事有很多好处。

    1. 错误不再写入windows中的应用程序日志,这有助于确保将混乱/开销降至最低。
    2. 如前所述,您有一个易于部署的方法来添加日志记录。

    我注意到人们在过去使用过许多变通方法,但最常见的是让用户的自定义处理程序知道CustomErrors设置。因此,基本上,您的代码将查看它想要发送的响应代码,然后根据自定义错误采取操作。这真是两全其美。