【问题标题】:In ASP.NET MVC, should OnException be used for application exceptions?在 ASP.NET MVC 中,应用程序异常应该使用 OnException 吗?
【发布时间】:2009-07-15 15:48:26
【问题描述】:

我正在用 ASP.NET MVC 构建一个小型应用程序。我仍在尝试解决我遇到的一些设计问题。

其中之一是使用异常。我已经构建了我的模型,以便在对象不存在或用户无法访问时抛出异常。在我看来,我认为我做出了正确的选择。

问题是,下一步是什么?我可以检查控制器中的异常,然后重定向到不同的视图,但这似乎在许多控制器的许多操作中产生了许多相同的模式。

或者,我可以简单地避免检查异常并覆盖控制器(或我将使用的某些基本控制器类)的 OnException 方法来处理它。这样可以避免我的行动变得杂乱无章。

从我找到的示例中,我可以看到如何使用 HandleError 和 OnException 记录未处理的异常(这是一件好事)并重定向到“抱歉!”页面,但我想知道您对在较少“不可预见的”异常情况下使用该机制的看法。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    您应该检查 HandleError 属性。您可以指定应针对哪个异常显示哪个视图。 ASP.NET MVC HandleError 它是特定于 MVC 的,对我来说比使用事件更“干净”。

    除了 HandleError 之外,我还使用 ELMAH 来捕获和记录异常。

    就个人而言,我试图达到一个点,即所有生成的异常都在控制器级别被捕获,并且不会超出此范围。然而,[handleerror] 正是这样做的——捕捉错误并向用户显示一个相关的、漂亮的页面。

    编辑:另外请注意,您可以在控制器上指定此内容,而不仅仅是操作。

    詹姆斯

    【讨论】:

    • 是的。根据文档,我对 HandleError 属性的问题是它在调试模式下不起作用。事实上,我根本没有让它工作。
    • 确保你有 以便 MVC 可以处理错误。
    • 确实如此。我没有完全理解 customErrors 配置元素。非常感谢!
    • 现在的问题是这样做是否是“最佳实践”。
    • 如果您使用 HandleError 属性,并且在 web.config 中启用 customErrors,您将无法使用 ELMAH 或其他方式记录异常,除非您处理 OnException。
    猜你喜欢
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2012-11-23
    • 2011-01-13
    • 1970-01-01
    相关资源
    最近更新 更多