我该如何处理服务层的异常?

时间:2013-02-22 13:29:28

标签: c# asp.net-mvc

我在GUI图层中使用DataAnnotations来显示表单中的错误消息,但我对如何处理来自服务层的异常以及如果用户出现的内容有什么疑问。

要与我的服务层通信,我使用请求和响应类。例如:

public class RegisterUserRequest
{
    public string Username { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
}

我应该在setter方法中的请求类中检查空值吗?或者我应该在我的服务中这样做?我认为在请求和响应setter方法上执行此操作是有意义的,如果参数为null,则抛出ArgumentNullException

在我的服务类中,如果用户名或密码无效,我会抛出InvalidOperationException。这是抛出的正确例外吗?

我遇到的另一个问题是我是否应该捕获所有异常,如果是,我该如何告诉用户异常?例如,如果某个属性为null,则应抛出ArgumentNullException。但是,我应该让用户知道这个吗?

当用户名无效时,我会抛出InvalidOperationException。这个我想向用户展示,因为它告诉用户它应该至少使用3个字符。

我认为我应该使用InvalidOperationException向用户显示的错误消息,并在发生其他异常时重定向到标准错误视图:“哎呀,出了问题”。

2 个答案:

答案 0 :(得分:0)

我只是再次使用DataAnnotations,因为如果他们没有为他们的用户名或密码输入正确的格式,则没有人想要重定向错误页面。

答案 1 :(得分:0)

我认为当用户名或密码无效时抛出更相关的异常是ArgumentException。在该异常类型的描述中,它特别涵盖了参数无效的情况。

至于将异常传递给用户,您应该尝试在不暴露服务的任何内部工作的情况下通知用户错误,因此收到包含错误“无效用户名 - 的响应消息必须至少为3字符“会给他们有用的反馈。

对于您不想详细传递的错误,我建议您自己记录错误消息,然后将错误ID传递给用户。例如“发生了未处理的错误。请联系支持部门,引用错误ID xxx”。这应该仅作为最后的手段使用 - 最好告知用户如何修复它,但这是一种捕获所有错误而不向客户端传递太多信息的合适方法。