一个无法捕获的异常?

时间:2010-09-30 09:53:59

标签: .net asp.net vb.net exception exception-handling

我的文件中包含以下代码:

在Class Customer.Page中:

Try
    If Not SiteContent.CurrentUser(False) Is Nothing Then
        If Not SiteContent.CurrentUser(False).IsAdministrator OrElse SiteVariables.CustomerMode Then
            SiteContent.PageViewManager.Create(New List(Of Control))
        End If
    Else
        SiteContent.PageViewManager.Create(New List(Of Control))
    End If
Catch ex As Heritage.Web.Content.Items.Exceptions.ExceptionGroup
     My.Response.Write(ex.Message & "<br />" & ex.StackTrace & "<br />")
End Try

在课程项目中

Public Overridable Sub CheckValidity()

    'If the item is recycled then return true'

    If IsRecycled() Then
        Exit Sub
    End If

    'ExceptionGroup to store all exceptions which are thrown due to invalid data.'

    Dim ExceptionGroup As New Exceptions.ExceptionGroup
    Try

        'Checks if the item already exists'

        Exists()
    Catch ex As Exception
        'Add any exception as a result of this function to the ExceptionGroup'

        ExceptionGroup.AddException(ex)
    End Try

    'Check each attribute - add any exception which occurs as a result of validating their values to the ExceptionGroup'

    For Each Attribute As Items.Attribute In GetAttributes
        If TypeOf Attribute Is StringAttribute Then
            Dim StringAttribute As StringAttribute = Attribute
            Try
                If Not StringAttribute.Validate(StringAttribute.Value) Then Throw New Exceptions.ItemExceptions.RequiredFieldException(StringAttribute.Name)
            Catch ex As Exception
                ExceptionGroup.AddException(ex)
            End Try
        ElseIf TypeOf Attribute Is IntegerAttribute Then
            Dim IntegerAttribute As IntegerAttribute = Attribute
            Try
                If Not IntegerAttribute.Validate(IntegerAttribute.Value) Then Throw New Exceptions.ItemExceptions.RequiredFieldException(IntegerAttribute.Name)
            Catch ex As Exception
                ExceptionGroup.AddException(ex)
            End Try
        ElseIf TypeOf Attribute Is DateTimeAttribute Then
            Dim DateTimeAttribute As DateTimeAttribute = Attribute
            Try
                If Not DateTimeAttribute.Validate(DateTimeAttribute.Value) Then Throw New Exceptions.ItemExceptions.InvalidFormatException(DateTimeAttribute.Name)
            Catch ex As Exception
                ExceptionGroup.AddException(ex)
            End Try
        End If
    Next

    'Rollback the transaction if the ExceptionGroup contains any Exceptions'

    If ExceptionGroup.Exceptions.Count > 0 Then
        RollbackTransaction()
        Throw ExceptionGroup
    End If
End Sub

我知道这可能看起来很复杂,但你应该能够推断出第一块代码会捕获在第二块代码中抛出的ExceptionGroup。

这基本上是一个系统的一部分,当数据库中的行首次需要时(即,为每一行创建许多特定类型的对象,然后提取数据)时,从数据库中的行创建对象。首次请求时,每个。每个对象都存储一个DataRow实例,当首次请求属性值时,对象中的属性将从中提取所需的数据。

我的观点是,它是我从头开始制作的系统,没有第三方代码,也没有使用Linq或任何其他类似的东西(我也不想,在任何人说切换到Linq或类似的东西之前) )。

无论如何,正如您所知,ExceptionGroup由每个属性验证引发的其他异常填充。

现在是问题所在。在运行第一块代码而没有 try catch语句时,它会抛出一个可怕的红色和黄色错误屏幕。但是带有 try catch语句,它可以完美加载。

有谁知道可能导致这种奇怪行为的原因是什么?有没有人曾经遇到过这种行为?

提前致谢。

此致

理查德

2 个答案:

答案 0 :(得分:1)

我认为问题在于您在异常组中抛出了多个异常 在这里看到这篇文章。

Throwing multiple exceptions in .Net/C#

答案 1 :(得分:0)

你不应该写一个日志框架。将其写入响应可能会带来安全风险。您可以使用log4Net / Logging应用程序块或编写您自己的简单记录器,以后可以替换。但永远不要向客户发送异常信息。