【问题标题】:Catching 500 Errors after Response.Flush()在 Response.Flush() 之后捕获 500 个错误
【发布时间】:2011-10-13 07:19:42
【问题描述】:

一旦数据被刷新到页面,并且在以后的进程中产生了错误,错误信息就会写入浏览器内部,而不是在页面上产生一个完整的 500 错误。如何捕获在调用Response.Flush() 后写入页面的那些错误? Send Errors to Browser 设置为 = True,但错误不会触发 500 错误页面,而只会触发屏幕上的错误消息。发生这种情况时如何捕获错误?

【问题讨论】:

  • 如果你可以在这里粘贴你的代码,这样我就可以知道它到底在哪里产生了问题

标签: iis iis-7 asp-classic


【解决方案1】:

调用 Response.Flush() 后,响应头和当时响应缓冲区中的所有内容都会发送到浏览器。 HTTP 状态代码位于响应的第一行,因此在发送标头后无法再更改。

【讨论】:

    【解决方案2】:

    我发现处理这种情况的最佳方法是将所有渲染放在Render 子中(可以包括%> 和html),并使用

    On Error Resume Next
    
    Render
    
    If Err.number <> 0 Then
        ' Handle the error
        Response.Write "Error"
    End If
    

    当渲染中发生错误时,Render sub 会立即中断,您可以使用任何您希望的自定义​​代码来处理错误,包括来自包含的代码。因此,这不再是一个只放在一个地方的包罗万象的解决方案,但是对于需要刷新技巧的页面,好吧,只需再使用一个技巧来处理它们的错误。

    整个页面代码看起来像

    <%@  language="VBSCRIPT" codepage="65001" %>
    
    ' Do everything that does not need any Flush
    ...
    
    ' Now handle the hacky part
    
    On Error Resume Next
    
    Render
    
    If Err.number <> 0 Then
        ' Handle the error
        Response.Write "Error"
    End If
    
    Sub Render
    
    <%
    <!-- your part of rendering which has to do flushes -->
    ...
    %>
    
    End Sub
    
    

    【讨论】:

      【解决方案3】:

      在 IIS 中选择您的虚拟目录或网站,然后在 IIS 部分下的右侧部分中,您可以看到 ASP 选项选择此 ASP 部分并单击页面右上角的打开功能。 然后在 Debugging Properties 下设置 true >> Send Error to the Browser

      谢谢 JJ

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 2017-12-17
        • 2013-02-06
        • 1970-01-01
        • 2012-03-19
        • 1970-01-01
        • 2018-09-02
        相关资源
        最近更新 更多