0

DataAnnotations在我的 GUI 层中使用以在表单中显示错误消息,但我有一些关于如何处理来自我的服务层的异常以及如果它们发生时向用户显示什么的问题。

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

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

我应该在 setter 方法中检查我的请求类中的空值吗?还是我应该在我的服务中这样做?ArgumentNullException我认为在请求和响应设置器方法上执行此操作并在参数为空时抛出一个是有意义的。

在我的服务类InvalidOperationException中,例如用户名或密码无效时,我会抛出一个错误。这是抛出的正确异常吗?

我的另一个问题是我是否应该捕获所有异常,如果是,我应该告诉用户关于异常的什么?例如,如果某个属性为空,它应该抛出一个ArgumentNullException. 但是我应该让用户知道这一点吗?

当用户名无效时,我会抛出一个InvalidOperationException. 我确实想向用户展示这个,因为它告诉用户它应该使用至少 3 个字符或其他内容。

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

4

2 回答 2

0

我会简单地再次使用 DataAnnotations,因为如果他们没有为他们的用户名或密码输入正确的格式,没有人希望被重定向到错误页面。

于 2013-02-22T13:36:44.650 回答
0

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

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

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

于 2013-02-22T13:39:07.400 回答