在Response.Flush()之后捕获500个错误

问题描述 投票:2回答:3

一旦将数据刷新到页面,并在将来的进程中生成错误,就会在浏览器中写入错误消息,而不是在页面上生成整个500错误。如何在调用Response.Flush()后捕获写入页面的错误? Send Errors to Browser设置为=,但错误不会触发500错误页面,而是仅触发屏幕上的错误消息。发生这种情况时如何捕获错误?

iis iis-7 asp-classic
3个回答
1
投票

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


0
投票

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

On Error Resume Next

Render

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

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

整体页面代码看起来像

<%@  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


-1
投票

在IIS中选择您的虚拟目录或网站,然后在IIS部分的右侧部分,您可以看到ASP选项选择此ASP部分,然后单击页面右上角的打开功能。然后在调试属性下设置true >>将错误发送到浏览器

谢谢JJ

© www.soinside.com 2019 - 2024. All rights reserved.