在我的 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/