Всякий раз, когда на нашем сайте возникает необработанное исключение, я хочу:
- Отправить уведомление по электронной почте
- Очистить сеанс пользователя
- Отправить пользователя на страницу с ошибкой («Извините, возникла проблема ...»)
Первое и последнее, что я работал долгое время, но второе вызывает у меня некоторые проблемы. Мой Global.asax.vb включает в себя:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Send exception report
Dim ex As System.Exception = Nothing
If HttpContext.Current IsNot Nothing AndAlso HttpContext.Current.Server IsNot Nothing Then
ex = HttpContext.Current.Server.GetLastError
End If
Dim eh As New ErrorHandling(ex)
eh.SendError()
' Clear session
If HttpContext.Current IsNot Nothing AndAlso HttpContext.Current.Session IsNot Nothing Then
HttpContext.Current.Session.Clear()
End If
' User will now be sent to the 500 error page (by the CustomError setting in web.config)
End Sub
Когда я запускаю отладку, я вижу, что сеанс очищается, но затем на следующей странице сеанс снова возвращается!
В конце концов я нашел ссылку, которая предполагает, что изменения в сеансе не будут сохранены, пока не будет вызван Server.ClearError. К сожалению, если я добавлю это (чуть ниже строки, которая устанавливает «ex»), то перенаправление CustomErrors, похоже, не сработает, и у меня останется пустая страница?
Есть ли способ обойти это?