ASPError对象在我的自定义错误页面上不包含任何数据

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"似乎不起作用.

Mar*_*iek 5

这是适合我的解决方案.

像这样设置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 NextResponse.Clear.

我在创建自定义ASP错误页面 Microsoft KB文章(Q224070)上找到了解决方案.