vb.net - MVC 3 错误处理的正确编码示例

标签 vb.net asp.net-mvc-3 error-handling

我来自 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/

相关文章:

javascript - 更改 Javascript 来更新面板

c# - 反序列化大型 json 对象的 JsonMaxLength 异常

html - CSS - 2 列布局 - ASP .NET MVC3/Razor

sql - 热修复: not connected error when execution the sql statement, DPI-1010:not connected?

error-handling - 错误对象的经典ASP行号

mysql - vb.net INSERT CURDATE() 到 MySQL 问题

vb.net - 如何将 .NET 2.0 网站升级到 3.5?

asp.net-mvc-3 - Asp.net MVC maxlength 不使用数据注释工作

apache - fatal error : Uncaught exception 'Zend_Cache_Exception' with message > 'cache_dir must be a directory'

c# - 在运行时合并 ResX 文件?