传统的ASP - Response.Redirect的一个子 - 错误处理
我希望做如下......提供的网页开发者可以重定向到提供发生错误...就像一个VB错误连接无法打开或对象找不到...或数据库错误提出...但由于我将重定向到一个子页面实际上并没有重定向...是否有可能我不能从一个子重定向?看起来很奇怪。传统的ASP - Response.Redirect的一个子 - 错误处理
运行的是引发错误
Dim cmd
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "spReturnDBException"
cmd.Execute
,呼叫处理错误的功能,设置了一些会话PARMS并重定向如果neccessary
HandleErrors con _
, Request.ServerVariables("PATH_INFO") _
, "An error occurred while trying to save sessions." _
, "Actual Error: " + Err.Description + " EmpNo: " + Session("EmpNo") _
+ ". QueryString: " + Request.Querystring _
, 0
这被称为子存储过程。
sub HandleErrors(connection, WebPagePath, GenericErrorMessage, DebugInfo, Severity)
//Check for vb errors
if Err.Number <> 0 Then
Session("WebPagePath") = WebPagePath
Session("SafeErrorMessage") = GenericErrorMessage 'Session("SafeErrorMessage") + "A connection was dropped while trying to complete sessions."
Session("DebugInfo") = DebugInfo ' Err.Description
Session("LineNo") = Err.Line
Session("StackTrace") = ""
Session("Severity") = Severity
response.redirect("Error.asp")
//error occurs
elseif connection.Errors.count <> 0 then
response.write("a database error occurred.")
// Store safe error message/# in session
Session("WebPagePath") = WebPagePath
Session("SafeErrorMessage") = GenericErrorMessage 'Session("SafeErrorMessage") + "An error has occurred while trying to save sessions."
Session("DebugInfo") = DebugInfo '"Some extra added debug info from the webpage"
Session("LineNo") = 0
Session("StackTrace") = ""
Session("Severity") = Severity
Dim objError
for each objError in connection.Errors
// Store safe error number in session
Session("SafeErrorNumbers") = Session("SafeErrorNumbers") + objError.Description
if connection.Errors.Count > 1 then
Session("SafeErrorNumbers") = Session("SafeErrorNumbers") + "|"
end if
next
response.Redirect("Error.asp")
end if
Err.Clear
end sub
显示错误行号:
set objError = Server.GetLastError()
strErrorLine = objError.Line
下面是使用Err.line几个主题:
http://www.daniweb.com/web-development/asp/threads/11615
http://www.sitepoint.com/forums/showthread.php?279612-ASP-Error-Handling.-Err.Line-weird-behavior
我不能解释你为什么得到你的结果。我可以告诉你,如果你的代码到达一个包含Response.Redirect
的行,那么重定向将发生,不管它是否在Sub procdure中。
我会提出这个建议。停止使用使用On Error Resume Next
。处理例外情况是非常痛苦的。
而是改变HandleErrors
到GenerateConnectionError
。它的工作将是编写错误来源和描述字符串,并故意用用户定义的错误号码(我倾向于使用1001)调用Err.Raise
。现在
您Error.asp
应安装在你的应用程序作为处理程序500.100 HTTP状态代码的根。当发生脚本错误时,IIS将查找当前错误页面集合以确定要执行的操作。您将设置此项以执行URL并将您的Error.asp
指定为URL。
当Error.asp执行的时候会找到有关的详细信息页面被请求从QueryString
。在这里,您还可以使用Server.GetLastError
获取ASPError
对象,您可以从中获取有关该错误的其他详细信息。
使用这种方法将不需要开发任何脚本错误细节记得胡椒他们的代码与HandleError
代码。开发人员需要记得在执行使用ADODB.Connection的代码时调用GenerateConnectionError
,即使如此,您也可以在.asp包含文件内抽象出它。
安东尼你是正确的,因为我在上面的评论中指出......简历旁边隐藏了Err.Line在asp中不被支持的事实。因此,目前我已经失去了行号功能,但是其他所有功能都可以正常工作......现在,如果发生错误,则处理错误的调用现在会重定向,如果不必要,则不会。因此,我们必须做的添加错误处理设置在错误恢复下一步,然后调用handlErrors我们期望可能的错误。非常感谢您的帮助......您错误的帮助我找到了问题。 – 2012-01-05 16:00:11
@Kevin:我很高兴你有一个解决方案。我希望你只能在小函数中使用On Error Resume Next,而不是全局设置它。全局On Error Resume Next是一个调试噩梦,并且试图通过Err.Number来处理错误只是使代码变得混乱(这通常导致更多的错误)。你可能不会很高兴听到这个消息,它可能在你的应用程序中根深蒂固,无法做任何事情,但最好你知道的不是。 – AnthonyWJones 2012-01-06 13:30:44
您是否收到错误? – Robert 2012-01-04 16:24:40
@Robert如果我关闭“在错误恢复下一步”我得到的过程中提出的错误...这是我所期望的。如果我设置“On error resume next”,那么重定向就不会发生,我最终坐在我的原始页面上,没有任何反应。 – 2012-01-04 16:37:34
你可以改变一个函数,并将重定向页面返回到调用页面,并让该页面做'response.redirect()' – Robert 2012-01-04 16:46:23