c# - 向用户报告异常消息时的最佳实践

标签 c# .net asp.net asp.net-mvc exception

在我的 ASP.NET MVC 应用程序中,我不想向用户报告所有异常消息。但是我想向用户报告某些类型的异常,因此我创建了一个操作过滤器来确定它是否是这种特定类型的异常,如果是则显示异常消息,否则显示一般消息。所以我创建了一个名为 ClientException 的自定义异常。

我的过滤器看起来像这样:

    if (filterContext.Exception is ClientException)
         message = filterContext.Exception.Message.Replace("\r", " ").Replace("\n", " ");
   else
        message = "An error occured while attemting to perform the last action.  Sorry for the inconvenience.";

    filterContext.HttpContext.Response.Status = "500 " + message;

我读了这个http://blogs.msdn.com/b/kcwalina/archive/2007/01/30/exceptionhierarchies.aspx作者建议使用现有的 .NET 异常类型来报告使用错误。但是,通过引入我的自定义异常,我只需要在我的过滤器中进行一次检查。我的方法可以吗?

最佳答案

我喜欢这种方法有几个原因。

首先,它安全地失败了。如果某人没有明确抛出 ClientException,则不会报告异常详细信息。与不小心显示某些东西相比,忘记显示某些东西是一个更小的问题。

其次,它允许在适当的地方决定是否显示异常。例如,并非所有 IOExceptions 都显示。有些可能是,有些则不会。可以在调用堆栈的任何位置捕获和转换特定的异常,以便可以在已知正确的地方进行转换。

这两件事加在一起意味着 future 的开发人员不会不恰本地更改要显示的整个异常类,或者认为某些东西实际上不会显示。

此外,使用特定异常类型的目的是确定以后要采取什么行动来响应该异常。 “向用户显示此消息”是一个非常好的指定操作。一旦做出该决定,那么异常的确切性质就完全无关紧要了。 (当然,最初的问题可能放在 InnerException 属性中,用于记录目的。)

所以,在我看来,这是一个很好的设计。

关于c# - 向用户报告异常消息时的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197472/

相关文章:

C#异步LCD写入

.net - .NET 中的免费语法突出显示组件

c# - TPL 数据流和异步方法调用

.net - 将“开始”菜单中的项目拖到其上时,WPF 应用程序崩溃

c# - 通过 ajax 加载的 ASP.NET MVC 表单多次提交

c# - 如何防止 WebBrowser 控件捕获异常并将它们显示为脚本错误?

asp.net - 在 .net 3.5 SP1 中设置表单的操作会导致编译时出错

asp.net - 如何检查EnableViewStateMac是否在运行时设置?

c# - 使用条件语句的好处 ? : (ternary) operator

c# - 用户通过身份验证后触发一次功能的最佳方式