Я из мира Winforms, где я перехватил все и обработал ошибки с сообщениями для пользователя с помощью MessageBox.Show (ex.message) или просто зарегистрировал его.
Сейчас я нахожусь в мире Интернета (MVC 3) и не могу найти окончательно закодированный пример того, как правильно обрабатывать ошибки. Позвольте мне показать вам, что я использую:
Пользователь нажимает на ссылку, которая запускает действие контроллера:
Function SelectAlertKPIs() As ActionResult
Try
Return PartialView()
Catch ex As Exception
TempData("ErrorMessage") = "There was a problem during page load: " & ex.Message & vbCrLf & vbCrLf & ex.StackTrace
Return RedirectToAction("HttpError", "Error")
End Try
End Function
Это представление загружает сетку Telerik с привязкой AJAX, поэтому теперь привязка выполняет это действие:
<GridAction()> _
Function _SelectAlertKPIs() As ActionResult
Try
Return PartialView(New GridModel(AlertKPIRepository.All()))
Catch ex As Exception
TempData("ErrorMessage") = "There was a problem during page load: " & ex.Message & vbCrLf & vbCrLf & ex.StackTrace
Return RedirectToAction("HttpError", "Error")
End Try
End Function
Который вызывает этот метод для получения данных:
Public Shared Function All() As IList(Of AlertKPI)
Dim l As IList(Of AlertKPI) = Nothing
Try
Using dc As New AdminAlertKPIDataContext(TripleDESSecurity.Decrypt(SharedData.PortalCnx))
l = (From d In dc.AdminAlertKPIs Order By d.ID Select New AlertKPI With {
.ID = d.ID,
.KPI = d.KPI,
.KPIName = d.KPIName,
.KPIDescription = d.KPIDescription
}).ToList
End Using
Return l
Catch ex As Exception
Throw
Finally
If Not l Is Nothing Then l = Nothing
End Try
End Function
Это мои действия ErrorController:
Public Function HttpError() As ActionResult
Dim s As String = String.Empty
s = TempData("ErrorMessage")
ViewData("ErrorMessage") = "An error occurred. " & s
Return PartialView("Error")
End Function
Public Function Http404() As ActionResult
Try
ViewData("ErrorMessage") = "The page you requested could not be found"
Return View("Error")
Catch ex As Exception
Return View("Error")
End Try
End Function
Это то, что у меня есть в моем web.config:
<customErrors mode="On" defaultRedirect="/Error/HttpError">
<error statusCode="404" redirect="/Error/Http404" />
</customErrors>
Теперь, если я добавлю код в действие моего контроллера для преднамеренного выброса:
Throw New HttpUnhandledException
Затем он попадает в блок catch, а затем направляется к действию HttpError. Дважды! и тогда мое представление Error.aspx никогда не открывается, вместо этого я получаю либо отсутствие результата JSON, либо внутреннюю ошибку сервера 500 ... это не имеет смысла для меня. По сути, я не знаю, что я делаю.
И я мог бы использовать действительно хорошее руководство ...