我来自 Winforms 世界,在那里我捕获了所有内容并使用 MessageBox.Show(ex.message) 处理向用户发送消息的错误,或者只是记录它。
现在我在网络(MVC 3)世界中,我似乎无法找到一个明确的编码示例来说明如何使用正确的错误处理。让我告诉你我正在使用什么:
用户单击运行 Controller 操作的链接:
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
这个 View 加载了一个带有 AJAX 绑定(bind)的 Telerik 网格,所以现在绑定(bind)运行这个 Action :
<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>
现在,如果我将代码添加到我的 Controller 操作中以故意抛出:
Throw New HttpUnhandledException
然后它落到 catch block ,然后路由到 HttpError Action .. 两次!然后我的 Error.aspx View 永远不会打开,相反,我没有得到 JSON 结果或 500 内部服务器错误......对我来说毫无意义。基本上,我不知道我在做什么。
我可以使用一些非常好的指导......
最佳答案
您需要查看 [HandleErrorAttribute]
- 无需使用 try catch block 污染您的操作方法。您可能希望实现自己的错误处理程序属性以进行额外的日志记录——这就是我今天正在做的事情。这是今天关于异常处理的帖子:click here
您的 Web 配置适用于 MVC 应用程序管道之外发生的异常。 IIS 将能够读取 Web 配置,然后将用户重定向到正确的页面。其他人,如果我错了,请纠正我,因为我今天才开始看这个。
关于vb.net - MVC 3 错误处理的正确编码示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7662634/