Mar*_*iek 6 vbscript iis-7 asp-classic
我在web.config中有以下内容
<httpErrors errorMode="Custom">
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" prefixLanguageFilePath="" path="/error.asp" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
错误处理正在工作,当发生500错误时,我被发送到my error.asp而不是默认的500错误页面.
问题是没有设置ASPError返回的对象的任何属性Server.GetLastError.
例如,在下面的代码中,错误描述是
dim oErr : set oErr = Server.GetLastError
Response.Write "Error Description: " & oErr.Description& "<br />"
Run Code Online (Sandbox Code Playgroud)
基于Joel在评论中链接的主题,我已将web.config更新为以下内容:
<httpErrors errorMode="Custom">
<remove statusCode="500" subStatusCode="100" />
<error statusCode="500" subStatusCode="100" prefixLanguageFilePath="" path="/error.asp" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
这确实给了我返回的ASPError对象中的数据GetLastError.
现在的问题是我从生成错误的页面的开头获取HTML,然后页面的其余部分是HTML error.asp.
我真的很喜欢重定向到error.asp但改变web.config responseMode="Redirect"似乎不起作用.
这是适合我的解决方案.
像这样设置web.config:
<httpErrors errorMode="Custom">
<remove statusCode="500" subStatusCode="100" />
<error statusCode="500" subStatusCode="100" prefixLanguageFilePath="" path="/error.asp" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
一个简单的error.asp可能如下所示:
<%@ Language=VBScript %>
<%
Option Explicit
On Error Resume Next
Response.Clear
Dim objError, MessageBody
Set objError = Server.GetLastError()
Response.Write objError.ASPCode & "<br />"
Response.Write objError.Number & "<br />"
Response.Write objError.Description & "<br />"
%>
Run Code Online (Sandbox Code Playgroud)
我的问题的关键似乎是On Error Resume Next和Response.Clear.
我在创建自定义ASP错误页面 Microsoft KB文章(Q224070)上找到了解决方案.