I have the following code in my files:
In 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
In Class Item
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
I know this may all seem complicated, but you should be able to deduce that the first chunk of code catches the ExceptionGroup thrown in the second chunk of code.
This is basically part of a system where objects are created from rows in the database as and when one of the objects is first needed (i.e. many objects, of a specific type, is created for each row and then data is extracted for each one only when it is first requested. Each object stores an instance of DataRow from which the attributes within the object extract the piece of data they need when the value of the attribute is first requested).
My point is that it is a system I have made from scratch with no third party code and not using Linq or any other fancy stuff like that (nor do I want to, before anyone says to switch to Linq or anything like that).
Anyway the ExceptionGroup, as you can tell, is populated by other exceptions 开发者_StackOverflow社区which are thrown by validation of each attribute.
Now heres the problem. On running the first chunk of code without the try catch statement, it throws a horrible red and yellow error screen. However with the try catch statement, it loads perfectly.
Does anyone have any idea what could be causing this weird behaviour? Has anyone ever encountered this behaviour before?
Thanks in advance.
Regards,
Richard
I think the problem is that your are throwing multiples exceptions with the exceptions group see this post here.
Throwing multiple exceptions in .Net/C#
Shouldn't you be writing to a logging framework. Writing it to response might pose a security risk. You can use log4Net / Logging application block or write your own simple logger which can be replaced later. But never ever send exception information to client.
精彩评论