Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net MVC 3错误处理的正确编码示例_Vb.net_Asp.net Mvc 3_Error Handling - Fatal编程技术网

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

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

我来自Winforms世界,在那里我用MessageBox.Show(ex.message)或只记录给用户的消息捕获一切并处理错误。 现在我身处web(MVC3)世界,似乎找不到一个明确的编码示例来说明如何使用正确的错误处理。让我告诉你我在用什么:

用户单击运行控制器操作的链接:

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