Vb.net MVC 3错误处理的正确编码示例
我来自Winforms世界,在那里我用MessageBox.Show(ex.message)或只记录给用户的消息捕获一切并处理错误。 现在我身处web(MVC3)世界,似乎找不到一个明确的编码示例来说明如何使用正确的错误处理。让我告诉你我在用什么: 用户单击运行控制器操作的链接:Vb.net MVC 3错误处理的正确编码示例,vb.net,asp.net-mvc-3,error-handling,Vb.net,Asp.net Mvc 3,Error Handling,我来自Winforms世界,在那里我用MessageBox.Show(ex.message)或只记录给用户的消息捕获一切并处理错误。 现在我身处web(MVC3)世界,似乎找不到一个明确的编码示例来说明如何使用正确的错误处理。让我告诉你我在用什么: 用户单击运行控制器操作的链接: Function SelectAlertKPIs() As ActionResult Try Return PartialView() Catch ex As Exception
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
以下是我的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>
然后它落在catch块上,然后路由到HttpError操作。。两次!然后我的Error.aspx视图永远不会打开,相反,我要么没有得到JSON结果,要么出现500个内部服务器错误。。。对我来说毫无意义。基本上,我不知道我在做什么
我可以使用一些非常好的指导….您需要查看
[HandleErrorAttribute]
-没有必要使用try-catch块来演示您的操作方法。您可能希望为附加日志实现自己的错误处理程序属性——这就是我今天要做的。这是今天关于异常处理的帖子:
您的web配置用于MVC应用程序管道之外发生的异常。IIS将能够读取web配置,然后将用户重新引导到正确的页面。其他人,如果我错了,请纠正我,因为我今天才开始看这个。你能提供实际的编码样本吗?有很多“调查这个或那个”,但在每个人的声音太多,什么是正确的方式。我正在寻找真正的例子插入到我提供的代码中。我也不明白你为什么说要远离try/catch。这不是污染,这是我所学到的纯粹的安全。在我的世界里,不使用Try/Catch一直是件坏事。因此,我无法理解为什么我应该离开这种范式。
<customErrors mode="On" defaultRedirect="/Error/HttpError">
<error statusCode="404" redirect="/Error/Http404" />
</customErrors>
Throw New HttpUnhandledException