我来自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
此视图使用AJAX绑定加载Telerik网格,因此现在绑定运行此操作:
<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内部服务器错误......对我来说不是一种感觉。基本上,我不知道我在做什么。
我可以使用一些非常好的指导......
答案 0 :(得分:0)
你需要研究[HandleErrorAttribute]
- 没有必要用try catch块来规划你的动作方法。您可能希望为其他日志记录实现自己的错误处理程序属性 - 这就是我今天所做的。这是今天关于异常处理的帖子:click here
您的Web配置适用于在MVC应用程序管道之外发生的异常。 IIS将能够读取Web配置,然后将用户重定向到正确的页面。其他人,如果我错了,请纠正我,因为我今天才开始看这个。