【发布时间】:2015-04-08 21:02:20
【问题描述】:
我正在为公共 Web API 构建一个 .NET 客户端库。我正在努力解决的一件事是如何最好地向库的用户指示错误情况。显然,当执行失败时,我的库应该向调用者抛出或传递异常,但是我应该使用现有的异常还是为我的库创建新的异常?如果我创建新的异常,我应该只创建一个异常还是多个?
选项 1:仅使用现有例外
在最基本的情况下,我可以例如 throw new Exception("API authentication error.");,但这是非常通用的,之后需要大量处理才能处理。我还可以使用更合适的现有异常,例如System.Security.Authentication.AuthenticationException,但是由于所有不同的命名空间,使用该库会很尴尬。在某些情况下,没有什么比InvalidOprationException 更合适的了,因此,对于使用该库处理错误的人来说,采用这种方法似乎会变得很麻烦。最简单的可能是只使用HttpException 类,因为大多数错误条件在任何情况下都是 HTTP 状态代码和消息的转换。
选项 2:为每种情况创建一个例外
我还可以为每个场景创建一个例外,但将它们全部保存在库中。所以我可以创建一个NotFoundException、AuthorizationException、TransactionsPendingException 和其他特定的异常。
选项 3:为我的客户创建一个例外
第三个选项是创建一个自定义异常MyApiException,其中包含出现的不同错误的状态代码(当然还有适当的消息)。所以我可能会throw new MyApiException(401,"Not authorized.")
在我看来,选项 3 是最容易实现且调用方法最容易处理的选项。我在 GitHub 和 Codeplex 上看到过使用这些选项的 API 客户端。是否有推荐的客户端库方法或所有方法都有效?
【问题讨论】: