HttpContext.Current.Server.GetLastError在IIS 7中不起作用

时间:2010-07-02 15:00:40

标签: asp.net iis-7

我只是想在错误页面上输出应用程序错误的详细信息。在global.asax我有一些处理,然后server.transfer到我的页面使用此代码:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'Get exception details
    Dim ex As Exception = HttpContext.Current.Server.GetLastError()

    If TypeOf ex Is HttpUnhandledException AndAlso ex.InnerException IsNot Nothing Then
        ex = ex.InnerException
    End If

    If ex Is Nothing Then
        lblError.Text = "<p>An unknown error occurred.</p>"
    Else
        'Determine what type of error we're dealing with
        If TypeOf ex Is System.Data.SqlClient.SqlException Then
            'A database-related exception...
            lblError.Text = String.Format("<p>The database is having problems... please try your submission again later.<br />{0}</p>", ex.Message)
        ElseIf TypeOf ex Is ApplicationException Then
            'An ApplicationException has occurred
            lblError.Text = String.Concat("<p>An application fault has been tripped:<br /> {0}</p>", ex.Message)
        Else
            'For all others, display the StackTrace
            lblError.Text = String.Format("<p>An unknown error occurred. The following dump of exception information can be used to diagnose the issue</p><p class=""stackTrace""><strong>Exception:</strong> {0}</p><p class=""stackTrace""><strong>Message:</strong> {1}</p><p class=""stackTrace""><strong>Stack Trace:</strong><br />{2}</p>", ex.GetType().ToString(), ex.Message, ex.StackTrace.Replace(System.Environment.NewLine, "<br />"))
        End If
    End If

End Sub

在当地它很棒。当我部署到运行IIS 7的Windows Server 2008计算机时,ex的条件是每次都没有被触发。 我猜这个问题与IIS版本有关 - 只是因为我看到了其他一些帖子,但没有解决方案。如果有人想到我如何完成我的错误消息转储,我会很感激。我想知道为什么会发生这种情况。我的意思是,修复很好,但我很好奇为什么。

2 个答案:

答案 0 :(得分:0)

  

有一个非常相似的已知错误   据说固定在的Vista   SP1,但看起来像是一样的修复   不是Windows 2008 Server的一部分。   但是有一个解决方法 - 如果你   设置网站的默认错误属性   (在IIS设置下 - &gt;错误页面 - &gt;   编辑功能设置...)到自定义   页面(见下文),IIS将调用此   错误未处理时的页面   通过明确配置   状态代码处理程序(所以你的404等   处理程序仍然可以工作) - 但是   某种原因,处理这个错误   方式意味着Server.GetLastError()仍然存在   工作正常。

请参阅原始博文:Fun with Server.GetLastError() in classic ASP on Windows Server 2008

我认为它与您的情况类似,也可能对您有帮助。

答案 1 :(得分:0)

另一种方法是在 web.config 中使用ASP.NET 3.5 SP1中引入的新参数redirectMode

  

redirectMode="ResponseRewrite"   mode允许加载错误页面   没有重定向浏览器,URL   保持不变,例外情况   不要丢失。

ASP.NET自定义错误页面上的answered - Server.GetLastError()为null 问题。有关详细信息,请参阅。