【发布时间】:2015-03-13 10:41:59
【问题描述】:
我正在编写一个 HttpHandler,作为我内部设计的一部分,我抛出不同的异常并在顶层捕获它们以确定将请求设置为什么状态代码。
即
ArgumentException 触发错误请求
AuthenticationException 触发未经授权的
OracleException 触发 InternalServerError
等等
我发现的问题是我使用 InvalidOperationException 来触发 NotFound,但是我的代码中的一个错误使我意识到,当然,某些系统异常继承自这些基本系统异常,这会导致意外响应。
即我发现ObjectDisposedException继承自InvalidOperationException,也就是说响应返回的是404而不是500。
有没有办法只捕获基本异常?
我找到了this thread,这表明我可以做一个过滤器并重新抛出,但这似乎很老套。
我最好创建自己的异常类型来省去所有这些麻烦吗?
【问题讨论】:
-
是的,你当然应该为这个特定的用例推出你自己的例外,而不是使用
InvalidOperationException。 -
绝对不要提出
InvalidOperationException不是为了它的意思。同样适用于任何其他例外。制作您自己的例外,并以Exception为基础。只需确保在抛出自己的异常时将原始异常作为内部异常传递,以维护调用堆栈。我不知道你为什么投了反对票,这是一个合法且非常常见的错误。 -
@mattm @bokibeg 谢谢你,我可能应该阅读文档,了解 .NET 对
InvalidOperationException的定义。我将定义自己的异常并将所有捕获的异常包装在其中。 -
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。