ASP.NET MVC2中正确的错误处理

Jus*_*ams 6 c# error-handling asp.net-mvc-2

我在我的基本控制器中有一个覆盖OnException(ExceptionContext filterContext)以在任何错误期间捕获应用程序,然后记录它们.我在我的应用程序中遇到的问题是这种特殊方法因某些错误而被触发四次.我将引导您完成一个场景:

假设我导航到: http:// localhost:180/someController/someAction?someId = XX

我的代码中的对象处理很差.传入的Id是无效的,它会检索一些空对象,然后,我的坏对象处理的bc,尝试对空对象进行操作.我得到一个例外.

BaseController的OnException在这里被触发.

该null对象仍然返回到视图,视图尝试将其绑定到某个东西,或者你拥有什么.

对于视图中的错误,BaseController的OnException再次在此处触发.

从本质上讲,只有一个错误对我来说很重要,但涓流效应导致更多错误被触发,并且垃圾邮件收件箱: - /.

在MVC2中捕获错误的正确方法是什么,而不是在我身上发生这种情况?

ajr*_*son 0

首先解释一下为什么会出现多个错误。第一个错误是由于尝试对模型或控制器中最有可能的空对象进行操作。当视图在期望对象存在时尝试绑定到空对象时,您可能会遇到第二个异常。不完全确定为什么会出现 4 个错误,但可能是因为代码正在尝试对当前为 null 的对象进行操作。

我的第一个建议是让 OnException 代码将应用程序重定向到友好的错误页面。如果您有显示错误页面的设置,您可能只是吃掉每个新异常,而不是让 web.config 正确处理错误页面。

我的第二个建议是添加一些代码来在操作空对象之前检查它们。这些通常称为保护条款,并且非常有帮助并且实施起来非常有用。然后,您可以确定一种友好的方式来处理错误,而不必总是记录异常(如果不需要),并且除了通用的“发生错误”之外,还可以向用户显示一条友好的消息。信息。

例如,在您的控制器中,您可以检查空对象,如果该对象为空,则将备用视图传递给用户

Function Example As ActionResult

    dim obj as Object = GetObject

    If obj is Nothing Then

        Return View("FriendlyNoObjectView")

    Else

        Return View(obj)

    End If

End Function
Run Code Online (Sandbox Code Playgroud)

我知道这是 vb(抱歉,我比 c# 更了解),但想法是一样的。如果您愿意,您仍然可以将其记录为错误,但您可以防止该错误多次发生。在发生错误时处理错误始终是一个很好的做法,并尽量不要让它一直浮动到堆栈顶部并导致多个其他错误。

希望这对您有所帮助,这些只是我阅读您的问题后的快速想法。