将系统错误转换为友好消息

时间:2013-03-28 05:39:34

标签: .net asp.net-mvc asp.net-mvc-4 exception-handling

我想知道是否有一种很好的方法可以将系统生成的错误转换为对用户更有意义的错误。例如,如果由于某种原因,应用程序无法连接到SMTP服务器。我想转换系统抛出的消息,类似于" SMTP连接失败"到"我们无法向您发送电子邮件"。这个友好的消息我想从资源文件中提取出来。虽然这是一个这样的例外的例子,但可能会有更多。

我们没有尝试跨越所有层的catch块。它仅存在于UI层中。我们有一个异常管理类,它接受所有异常并从中返回一个友好的字符串。 UI层中的每个catch块都会调用此异常管理类,并向其传递System.Exception类型的异常,其方法需要返回所述友好错误字符串以供UI使用。

我现在想到的唯一方法就是在异常管理类中有一个大的IF ELSE块来检查收到的异常字符串,并从资源文件中提取匹配的友好消息。

有没有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:1)

这就是为什么你有try catch来捕捉异常的原因。只使用特定错误类型而不是通用错误类型。这样你就可以在catch块内显示任何消息。但不建议在catch块内重新抛出自定义异常。在您的情况下,您可以捕获System.Net.Mail.SmtpException

答案 1 :(得分:0)

我认为您不能将异常映射到用户友好的错误。原因是一个例外是"什么"发生在相当低的水平,而用户只想知道"为什么"发生了什么以及他们可以做些什么来解决它。将FileNotFound映射到"系统尝试访问不存在的文件"没有用。相反,捕获FileNotFound然后,根据应用程序的状态,显示相关消息 - 将。

另一个想法是为每个可能失败的进程提供不同的错误消息,并显示该进程中抛出的任何异常的错误消息。如果您对流程进行精细化处理并尝试捕获,那么与向用户可理解的错误消息映射系统错误消息相比,您将能够为用户提供更好的通知系统。